所以我已经掌握了使用c / c ++,但我仍然有点误导。我也试图同时学习同步,所以事情并不完美。
所以我的潜在问题是,
我有一个Node对象,Node有一个名为run的方法。 Run创建一个pthread并传递一个名为compute()的函数的函数指针作为参数。
Compute函数有一个参数,即调用Run()的节点
Compute函数将访问一个Semaphore(sem_t),它是作为参数传递的Node对象的一个字段,并将在该信号量上调用sem_wait(Node.sem)。
如果我这样做,运行计算功能的新创建的线程实际上是否会调用sem_wait并执行定义的行为。或者最初创建Node的进程是否会调用sem_wait?
答案 0 :(得分:1)
sem_wait
调用将在调用它的线程中执行(正如@Jason C在他的评论中指出的那样)。根据您在线程启动后run
中所描述的内容,因此sem_wait
将在第一个线程中执行。
您似乎在想,因为Node
对象在两个线程中使用,不知何故对哪个线程执行调用有影响。它没有。线程共享内存空间,因此您的Node
对象可以在进程中的任何线程中使用。那是你开始遇到线程安全问题的时候。