mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 08:26:14 +00:00
54 lines
1016 B
C++
54 lines
1016 B
C++
// A C++ compiler is supposed to have thread-safe statics
|
|
|
|
#include <cstdio>
|
|
#include <vector>
|
|
#include <pthread.h>
|
|
|
|
class Singleton
|
|
{
|
|
public:
|
|
Singleton()
|
|
: value(42)
|
|
{ }
|
|
|
|
int value;
|
|
};
|
|
|
|
void* thread_func(void*)
|
|
{
|
|
static Singleton singleton;
|
|
|
|
fprintf(stderr, "%d\n", singleton.value);
|
|
fprintf(stderr, "%d\n", singleton.value);
|
|
fprintf(stderr, "%d\n", singleton.value);
|
|
fprintf(stderr, "%d\n", singleton.value);
|
|
fprintf(stderr, "%d\n", singleton.value);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int main(int, char**)
|
|
{
|
|
std::vector<pthread_t> thread(2);
|
|
void* v;
|
|
|
|
for (std::vector<pthread_t>::iterator p = thread.begin(); p != thread.end();
|
|
p++) {
|
|
if (pthread_create(&*p, 0, thread_func, 0) != 0) {
|
|
fprintf(stderr, "Creation of thread %d failed\n",
|
|
(int)(&*p - &*thread.begin()));
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
for (std::vector<pthread_t>::const_iterator p = thread.begin();
|
|
p != thread.end(); p++) {
|
|
pthread_join(*p, &v);
|
|
}
|
|
|
|
fprintf(stderr, "Done.\n");
|
|
|
|
return 0;
|
|
}
|
|
|