mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 08:26:14 +00:00
57 lines
1.1 KiB
C++
57 lines
1.1 KiB
C++
/*
|
|
* 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";
|
|
}
|