/*
* Test program for std::atomic<>
*
* See also https://bugs.kde.org/show_bug.cgi?id=328490.
*/
#include "../drd.h"
#include <atomic>
#include <iostream>
#include <string>
#include <pthread.h>
std::atomic<bool> g_b;
void *func1(void *instance)
{
while (!g_b) {
timespec delay = { 0, 100 * 1000 * 1000 };
nanosleep(&delay, NULL);
}
return NULL;
}
void *func2(void *instance)
{
g_b = true;
return NULL;
}
int main(int argc, char* argv[])
{
int err;
pthread_t thread1;
pthread_t thread2;
std::cerr << "Started.\n";
if (argc > 1)
DRD_IGNORE_VAR(g_b);
err = pthread_create(&thread1, NULL, &func1, NULL);
if (err != 0)
throw std::string("failed to create a thread.");
err = pthread_create(&thread2, NULL, &func2, NULL);
if (err != 0)
throw std::string("failed to create a thread.");
err = pthread_join(thread1, NULL);
if (err != 0)
throw std::string("Thread::join(): failed to join.");
err = pthread_join(thread2, NULL);
if (err != 0)
throw std::string("Thread::join(): failed to join.");
std::cerr << "Done.\n";
}