繁体   English   中英

使用pthreads()创建和管理线程

[英]Creating and managing threads with pthreads()

我浏览了网络上不同的pthread教程。 这里这里这里等等。 但是有一个问题仍然没有答案,并且想知道是否有人可以澄清它。

题:

  • 假设我要打印ababababa 并假设thread1正在打印athread2正在打印b 这意味着thread1执行,然后将控制权thread2thread2 然后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 + = 10sum-= 5是关键部分。 现在实现彼得森算法,并查看输出。

这是演示彼得森算法工作的最佳示例。

好。 所以我发现我的两个假设都是错误的。 原因我假设创建的线程将串行执行。 但是在创建线程时,操作系统将随机并行执行线程。 所以我实现了如下:

create_thread1(call function1)
create_thread2(call function2)

function1(){
  loop
}

function1(){
  loop
}

部分答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM