读书人

pthread互斥的有关问题多谢

发布时间: 2013-01-20 10:22:40 作者: rapoo

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;
}

读书人网 >UNIXLINUX

热点推荐