Home | History | Annotate | Download | only in tests
      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 
     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 
     24 void *func2(void *instance)
     25 {
     26   g_b = true;
     27   return NULL;
     28 }
     29 
     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