1 /*
2 * Test program for std::atomic<>
3 *
4 * See also https://bugs.kde.org/show_bug.cgi?id=328490.
5 */
6
7 #include "../drd.h"
8 #include <atomic>
9 #include <iostream>
10 #include <string>
11 #include <pthread.h>
12
13 std::atomic<bool> g_b;
14
func1(void * instance)15 void *func1(void *instance)
16 {
17 while (!g_b) {
18 timespec delay = { 0, 100 * 1000 * 1000 };
19 nanosleep(&delay, NULL);
20 }
21 return NULL;
22 }
23
func2(void * instance)24 void *func2(void *instance)
25 {
26 g_b = true;
27 return NULL;
28 }
29
main(int argc,char * argv[])30 int main(int argc, char* argv[])
31 {
32 int err;
33 pthread_t thread1;
34 pthread_t thread2;
35
36 std::cerr << "Started.\n";
37
38 if (argc > 1)
39 DRD_IGNORE_VAR(g_b);
40
41 err = pthread_create(&thread1, NULL, &func1, NULL);
42 if (err != 0)
43 throw std::string("failed to create a thread.");
44 err = pthread_create(&thread2, NULL, &func2, NULL);
45 if (err != 0)
46 throw std::string("failed to create a thread.");
47
48 err = pthread_join(thread1, NULL);
49 if (err != 0)
50 throw std::string("Thread::join(): failed to join.");
51 err = pthread_join(thread2, NULL);
52 if (err != 0)
53 throw std::string("Thread::join(): failed to join.");
54
55 std::cerr << "Done.\n";
56 }
57