【发布时间】:2014-11-13 22:12:19
【问题描述】:
我在网上浏览了不同的 pthread 教程。 here、here 和 here 等等。但是有一个问题仍然没有得到解答,想知道是否有人可以澄清它。
问题:
- 假设我想打印
a b a b a b a b a。假设thread1正在打印a并且thread2正在打印b。这意味着thread1执行然后将控制权交给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;
}
【问题讨论】:
-
主函数中没有
for循环。您只需创建thread1和thread2并让它们运行。thread1有一个for循环打印a五次。thread2有一个for循环打印b四次。在执行for循环的下一次迭代之前,每个线程使用彼得森算法等待另一个线程。 -
@user3386109 我不想打印
aaaaabbbbb我希望每个线程运行一次并将控制权移交给第二个线程 -
这不是彼得森算法的重点。 Peterson 的重点是允许两个线程交替使用单个资源。
thread1有一个重复五次的循环。每次循环时,thread1都会打印一个a,然后等待thread2运行。 -
@user3386109 我知道。完成后,我将添加一个计数器,作为两个线程之间的关键代码。如果他们有锁,每个人都会更新它。但这是第一阶段。将其视为分配限制。我想要一个有两个线程的循环,每个线程打印一个字符 a 或 b。循环应该打印例如 print 20 a b's。
-
i在线程函数中未初始化。请改用for (i=0;i<30;i++)。此外,您应该在main的末尾使用pthread_join而不是sleep。但未初始化的变量是更大的问题。
标签: c multithreading pthreads