多线程编程,使用pthread的mutex对树加锁问题
下面这段代码中,我要通过两个线程向树中插入节点,不知道为什么,当一个线程插入一些,另一个线程又开始插入时会出错,而如果一个线程全部插入完毕后,另一个线程再插入,就不会出错。
请大侠们帮忙看看这段代码,不胜感激
请大侠们帮忙看看这段代码,不胜感激
#define NUM 1000
pthread_mutex_t mutex;
static int threads = 2;
static int iter = NUM;
long arr[NUM];
static rbtree_t * rbtreePtr;
void* task(void* arg){
unsigned short id = (unsigned short)(unsigned int)arg;
int n = iter;
long key;
unsigned long seed = id;
unsigned long rand;
while (n--) {
rand = Random(&seed);
key = rand % 1000;
arr[n-1]=key;
pthread_mutex_lock(&mutex);
printf("%d ", n);
insertInt(rbtreePtr, &key);
pthread_mutex_unlock(&mutex);
}
return 0;
}
int
main (int argc, char** argv)
{
int ch,i;
pthread_t t[256];
rbtreePtr = rbtree_alloc(&compare);\\相当于给树初始化,没有给出compare函数
if(threads>256) threads = 256;
for(i=0; i<threads; i++)
pthread_create(&t[i], NULL, task, i+1);
for(i=0; i<threads; i++)
pthread_join(t[i], NULL);
}
...全文
相关推荐
Pthread多线程编程指南
多线程编程指南,SUN的Pthread线程库手册,中文版的。
C语言使用pthread多线程编程
我们进行多线程编程,可以有多种选择,可以使用WindowsAPI,如果你在使用GTK,也可以使用GTK实现了的线程库,如果你想让你的程序有更多的移植性你好是选择POSIX中的Pthread函数库,我的程序是在Linux下写的,所以我使用了Pthread库 运行之前需要做一些配置: 1.下载PTHREAD的WINDOWS开发包 pthreads-w32-2-4-0-release.exe(任何一个版本均可) http://sourceware.org/pthreads-win32/ ,解压到一个目录。 2.找到include和lib文件夹,下面分别把它们添加到VC++6.
pthread_mutex
linux 同步与互斥 posix 线程互斥 实现 。(此为博客http://blog.csdn.net/shallnet 文章对应源码下载)
互斥量mutex的简单使用(实例讲解)
本篇文章主要是对互斥量mutex的简单使用进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
Linux下多线程编程-Pthread与Semaphore的使用.doc
Linux下多线程编程-Pthread与Semaphore的使用.doc


高性能计算
