免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1349 | 回复: 2
打印 上一主题 下一主题

ansi C下多线程编程的问题 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2004-01-13 22:48 |只看该作者

ansi C下多线程编程的问题

我想建立多个线程,每个线程都是完成一样的打印任务,但是打印的内容不同。
我建立了互斥锁,但是访问的变量仍然不对,不知是哪里出现错误了,请教大家。
源代码如下:
#include "pthread.h"
#include "sys/time.h"
#include "stdio.h"
#include "stdlib.h"

#define THREAD_MAX_NUM 10
int send_num;
int send_count;
pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
pthread_t thread[THREAD_MAX_NUM];

char test[10][10];

void *sub_thread()
{
pthread_mutex_lock(&mut);
printf("现在在线程%d中\n",send_num);
pthread_mutex_unlock(&mut);
}

int create_thread()
{
int i=0,temp;
pthread_t threadid[THREAD_MAX_NUM];
for(i=0;i<THREAD_MAX_NUM;i++)
{

pthread_create(&thread,NULL,sub_thread,NULL);
pthread_mutex_lock(&mut);
send_num++;
pthread_mutex_unlock(&mut);
}
temp = i;
for(i=0;i<temp;i++)
{
pthread_join(thread,NULL);
printf("Thread %d down\n",i);
}
return i;
}

int main( int argc,char* argv[])
{
int i=0,thnum;

send_num = 0;

printf("Create %d thread \n",THREAD_MAX_NUM);
pthread_mutex_init(&mut,NULL);
thnum = create_thread();
printf("down\n";
}


编译运行后执行结果总不是期望中的打出0到9这十个数字哦,请问我还要做什么线程间的协调呢?

这十个线程我想要它同时执行,而不是通过sleep 1秒的形式或一个线程执行完毕后紧接着执行下一个线程的方式哦。

论坛徽章:
0
2 [报告]
发表于 2004-01-14 09:44 |只看该作者

ansi C下多线程编程的问题

楼主,我觉得你的程序很有问题。
1。互斥锁mut已经初始化过了,为什么还要在main中初始化呢?而且初始化还有问题。
2。只有住线程对send_num操作,根本不用同步。
3。sub_thread中要打出send_num的值,但是send_num可能已经不是当初创建该线程时的值,这个地方才需要同步。

论坛徽章:
0
3 [报告]
发表于 2004-01-14 14:57 |只看该作者

ansi C下多线程编程的问题

你还没理解多线程怎么回事呢,你找个例子看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP