pthread互斥的问题,谢谢
本帖最后由 guolisen 于 2013-01-09 14:59:03 编辑 我使用了一个全局变量做计数,利用构造和析构函数在线程进入时加1,推出时减1,没有互斥。请问为什么我开1000多线程结束之后这个全局变量的值不是0,有时是负数,有时是1、2.。。
int gCount = 0;
class CCount
{
public:
CCount()
{
gCount++;
}
virtual ~CCount()
{
gCount--;
}
};
///////////////线程函数//////////
void* work_thread(void* arg)
{
CCount count;
.........
}
/**
* @file cntr.cpp
* @brief
*/
#include <iostream>
using namespace std;
#include <pthread.h>
int gCount = 0;
pthread_mutex_t gMutex = PTHREAD_MUTEX_INITIALIZER;
class CCount {
public:
CCount()
{
pthread_mutex_lock(&gMutex);
gCount++;
pthread_mutex_unlock(&gMutex);
}
~CCount()
{
pthread_mutex_lock(&gMutex);
gCount--;
pthread_mutex_unlock(&gMutex);
}
};
void *work_thread(void *arg)
{
CCount count;
return NULL;
}
#define N 1000
int main(int argc, char *argv[])
{
int i;
pthread_t tid[N];
for (i = 0; i < N; ++i) {
pthread_create(&tid[i], NULL, work_thread, NULL);
}
for (i = 0; i < N; ++i)
pthread_join(tid[i], NULL);
printf("gCount=%d\n", gCount);
return 0;
}