当前位置: 技术问答>linux和unix
线程互斥问题
来源: 互联网 发布时间:2015-12-09
本文导语: 我在一个文件中: #define ... ... //------------------ pthread_mutex_t lock; queuedataList; void Init() { pthread_mutex_init(&lock,NULL); } void Add(XXXX data) { pthread_mutex_lock(&lock); dataList.(data); pthread_mutex_unlock(&lock); } 程...
我在一个文件中:
#define ...
...
//------------------
pthread_mutex_t lock;
queuedataList;
void Init()
{
pthread_mutex_init(&lock,NULL);
}
void Add(XXXX data)
{
pthread_mutex_lock(&lock);
dataList.(data);
pthread_mutex_unlock(&lock);
}
程序有N个线程,都会调用void Add(XXXX data)函数,但是现在出现一个问题:当这个线程第一次调用Add函数是成功的,但是第二次调用的时候就出现段错误了。是什么问题导致的?
#define ...
...
//------------------
pthread_mutex_t lock;
queuedataList;
void Init()
{
pthread_mutex_init(&lock,NULL);
}
void Add(XXXX data)
{
pthread_mutex_lock(&lock);
dataList.(data);
pthread_mutex_unlock(&lock);
}
程序有N个线程,都会调用void Add(XXXX data)函数,但是现在出现一个问题:当这个线程第一次调用Add函数是成功的,但是第二次调用的时候就出现段错误了。是什么问题导致的?
|
lock初始化问题
|
需要初始化
pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER;
|
应该是你自己程序的问题,跟线程互斥没关系。要么就是其他地方没有锁。你可以把中间那行换成简单一点的队列添加试试。
|
最简单的方法是把你中间那行换成计数器的加减来测试一下。
|
pthread_mutex_lock不可以加2次吧,我记的《unix环境编程2》上有这个说法.