多线程编程,使用pthread的mutex对树加锁问题

youngshaver 2011-03-09 01:19:27
下面这段代码中,我要通过两个线程向树中插入节点,不知道为什么,当一个线程插入一些,另一个线程又开始插入时会出错,而如果一个线程全部插入完毕后,另一个线程再插入,就不会出错。

请大侠们帮忙看看这段代码,不胜感激



#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);



}

...全文
156 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
youngshaver 2011-03-09
  • 打赏
  • 举报
回复
定义哈
youngshaver 2011-03-09
  • 打赏
  • 举报
回复
自己顶一下

pthread_mutex_lock(&mutex);

printf("%d ", n);
insertInt(rbtreePtr, &key);

pthread_mutex_unlock(&mutex);


2,408

社区成员

发帖
与我相关
我的任务
社区描述
高性能计算
社区管理员
  • 高性能计算社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧