当前位置: 技术问答>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》上有这个说法.
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。