64,682
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
pthread_cond_t _cond;
pthread_mutex_t condmutex;
class Test
{
public:
static void func()
{
//pthread_mutex_t hSingletonMutex;
//pthread_mutex_init(&hSingletonMutex, NULL);
if (i == 0)
{
//pthread_mutex_lock(&hSingletonMutex);
i++;
}
//pthread_mutex_unlock(&hSingletonMutex);
//pthread_mutex_destroy(&hSingletonMutex);
}
static int getI()
{
return i;
}
protected:
Test() {}
virtual ~Test() {}
private:
static int i;
};
int Test::i = 0;
void threadfunc()
{
pthread_mutex_lock(&condmutex);
pthread_cond_wait(&_cond, &condmutex);
//printf("wait singal finished\n");
Test::func();
pthread_mutex_unlock(&condmutex);
}
void threadfunc2()
{
pthread_mutex_lock(&condmutex);
pthread_cond_broadcast(&_cond);
//pthread_cond_signal(&_cond);
pthread_mutex_unlock(&condmutex);
}
int main(int argc, char** argv)
{
pthread_mutex_init(&condmutex, NULL);
pthread_cond_init(&_cond, NULL);
unsigned int count = 10;
if (argc == 2)
{
count = atoi(argv[1]);
}
pthread_t t_id[count];
pthread_t thread;
int i = 0;
for (; i < count; i++)
{
pthread_create(&t_id[i], NULL, (void*(*)(void*))threadfunc, NULL);
}
printf("create %d thread finished\n", count);
pthread_create(&thread, NULL, (void*(*)(void*))threadfunc2, NULL);
printf("create another thread finished\n");
for (i = 0; i < count; i++)
{
pthread_join(t_id[i], NULL);
}
pthread_cond_destroy(&_cond);
pthread_mutex_destroy(&condmutex);
printf("i = %d\n", Test::getI());
return 0;
}