[英]Creating and managing threads with pthreads()
我浏览了网络上不同的pthread教程。 这里 , 这里和这里等等。 但是有一个问题仍然没有答案,并且想知道是否有人可以澄清它。
ababababa
。 并假设thread1
正在打印a
, thread2
正在打印b
。 这意味着thread1
执行,然后将控制权thread2
给thread2
。 然后thread2
打印b
并将控制权移交给thread1
,依此类推。 在这种情况下,是否可以创建两个线程并在执行特定次数(使用线程ID或某些内置函数?)的循环内一次调用每个线程? 还是我每次必须使用循环创建两个线程? 例如:我应该做类似的事情:
create_thread1()
create_thread2()
for loop
call thread1()
call thread2
还是我应该做类似的事情:
for loop
create_thread1() to do something
create_thread2() to do something
编辑:我从问题中删除了部分细节,因为用户认为这是问题。
编辑:代码
void *func(void *arg){
int i;
while(i<30){
printf("%s\n",(char *)arg);
i++;
}
return 0;
}
int main(int argc, char *argv[]){
pthread_t thread1, thread2;
int rt1, rt2;
rt1 = pthread_create(&thread1, NULL, &func, "a");
rt2 = pthread_create(&thread2, NULL, &func, "b");
sleep(1);
return;
}
有一个全局变量之和在线程1加10 总结了1000次,在线程2减去5从总和 1000倍。 运行两个线程并查看输出。 比赛条件将会发生。 彼得森的算法是避免竞争条件。 其中sum + = 10和sum-= 5是关键部分。 现在实现彼得森算法,并查看输出。
这是演示彼得森算法工作的最佳示例。
好。 所以我发现我的两个假设都是错误的。 原因我假设创建的线程将串行执行。 但是在创建线程时,操作系统将随机并行执行线程。 所以我实现了如下:
create_thread1(call function1)
create_thread2(call function2)
function1(){
loop
}
function1(){
loop
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.