2014-01-28 35 views
1

我需要知道线程在进入等待状态之前如何将其ID发送给其他线程。我想通过一个变量与它的ID,但我不知道该怎么做。如何在线程之间发送变量/信息

+0

你可以使用一个管道来写和读(如果我明白你在问什么)。 –

回答

1

如果它只有一个线程及其父项,则可以使用全局变量,因为它们在所有线程之间共享。如果您希望同时访问,请将其设为volatile

编辑:我不确定您是否在Linux上使用POSIX线程,但您可能有办法在创建线程时传递指针(例如,指向struct)。它可能包含一个变量来存储它的ID或一个指向函数的指针来调用父线程。我知道你可以用Windows线程来做到这一点。

+0

如果它在所有线程之间共享(无论如何你会使它变成“volatile”),那么为什么限制“一个线程和它的父类?” –

+0

对不起,我在你回答后更新了这个问题。有很多线程和一个主线程(调度程序)。我需要最后一位在进入睡眠之前了解其他线程的ID。 – Albert

+0

@RobertHarvey如果你产生了几个线程,你不能使用一个变量,因为第二个线程产生将覆盖它。 – Matthieu

1

您可以在指向父级函数的线程中创建一个指针(通过引用)。当它进入等待状态时,它就可以使用该指针来触发其父项。

+0

当你说“属性”时,你真的指的是一个函数或方法的指针吗? (这是C语言) –

+0

是的,谢谢你的更正。 – 2014-01-28 19:12:13

0

线程共享内存,所以你可以分配一个全局变量,并让孩子写上它。

对于同步(又称通知父母已写入一个值),你有很多选择:你可以使用信号量,可以从线程发回信号回到它的父亲,使用一个同步变量,如解释here