我的pthread会等待还是主线程会等待?

时间:2016-09-28 02:45:37

标签: c++ multithreading

所以我已经掌握了使用c / c ++,但我仍然有点误导。我也试图同时学习同步,所以事情并不完美。

所以我的潜在问题是,

  • 我有一个Node对象,Node有一个名为run的方法。 Run创建一个pthread并传递一个名为compute()的函数的函数指针作为参数。

  • Compute函数有一个参数,即调用Run()的节点

  • Compute函数将访问一个Semaphore(sem_t),它是作为参数传递的Node对象的一个​​字段,并将在该信号量上调用sem_wait(Node.sem)。

如果我这样做,运行计算功能的新创建的线程实际上是否会调用sem_wait并执行定义的行为。或者最初创建Node的进程是否会调用sem_wait?

1 个答案:

答案 0 :(得分:1)

sem_wait调用将在调用它的线程中执行(正如@Jason C在他的评论中指出的那样)。根据您在线程启动后run中所描述的内容,因此sem_wait将在第一个线程中执行。

您似乎在想,因为Node对象在两个线程中使用,不知何故对哪个线程执行调用有影响。它没有。线程共享内存空间,因此您的Node对象可以在进程中的任何线程中使用。那是你开始遇到线程安全问题的时候。