diff --git a/test/misc/barrier b/test/misc/barrier new file mode 100755 index 0000000..4225ceb Binary files /dev/null and b/test/misc/barrier differ diff --git a/test/misc/barrier.arm64 b/test/misc/barrier.arm64 new file mode 100755 index 0000000..a0c96ed Binary files /dev/null and b/test/misc/barrier.arm64 differ diff --git a/test/misc/mfence_playground.c b/test/misc/mfence_playground.c new file mode 100644 index 0000000..89cdf52 --- /dev/null +++ b/test/misc/mfence_playground.c @@ -0,0 +1,45 @@ +#include +#include +#include +#include +#include + +// Shared variable +int a = 1; + +void *foo(void *_noarg) { + while (a) + asm volatile ("":::"memory"); + printf("Exiting from foo...\n"); + exit(EXIT_SUCCESS); +} + +void *bar(void *_noarg) { + a = 0; + printf("Exiting from bar...\n"); + exit(EXIT_SUCCESS); +} + +int main(int argc, char** argv) { + const size_t NR_THREADS = 2; + pthread_t *threads = calloc(NR_THREADS, sizeof(pthread_t)); + + int ret_create_thread_1 = pthread_create(&threads[0], NULL, foo, NULL); + if (ret_create_thread_1) { + perror("Failed to create pthread for `foo`."); + exit(EXIT_FAILURE); + } + + int ret_create_thread_2 = pthread_create(&threads[1], NULL, bar, NULL); + if (ret_create_thread_2) { + perror("Failed to create pthread for `bar`."); + pthread_cancel(threads[0]); + exit(EXIT_FAILURE); + } + + for (size_t thread_idx = 0; thread_idx < NR_THREADS; thread_idx++) { + pthread_join(threads[thread_idx], NULL); + } + + exit(EXIT_SUCCESS); +} \ No newline at end of file diff --git a/test/misc/nobarrier b/test/misc/nobarrier new file mode 100755 index 0000000..5364e2d Binary files /dev/null and b/test/misc/nobarrier differ