修改线程外部的线程数据

时间:2011-04-13 13:59:33

标签: c multithreading posix

如何从线程外部修改线程数据?

如果一个线程正在运行一个为应用程序的运行时循环的函数,它的数据如何设置,更改?

如何调用修改特定线程函数的函数?

这些功能属于哪里?

2 个答案:

答案 0 :(得分:1)

线程的优点和缺点是它们与进程中的每个其他线程共享内存空间。您可以使用在单线程应用程序中使用的任何形式的数据传输,以在应用程序的各个段之间传递数据。但是,在多线程应用程序中,您必须使用某种类型的同步来确保数据完整性并防止死锁。

答案 1 :(得分:0)

如果要从外部修改的“线程数据”是在线程中运行的函数中的局部变量形式,或者使用__thread扩展名创建的特定于线程的数据,那么只有方式你可以从外面修改它们(UB的模数代码,技术上只是破坏内存)是让线程获取其变量的地址并存储在其他线程可以看到它的地方(在全局变量中) ,或通过线程启动函数的void *参数传入的位置。

另请注意,正如重新运行所指出的,如果多个线程正在访问相同的数据,则必须使用某种同步方法。唯一的标准/可移植同步方法是pthread:pthread_mutex_lock等,但您也可以使用汇编或编译器内在函数(如gcc中的__sync_*)。