如何从线程外部修改线程数据?
如果一个线程正在运行一个为应用程序的运行时循环的函数,它的数据如何设置,更改?
如何调用修改特定线程函数的函数?
这些功能属于哪里?
答案 0 :(得分:1)
线程的优点和缺点是它们与进程中的每个其他线程共享内存空间。您可以使用在单线程应用程序中使用的任何形式的数据传输,以在应用程序的各个段之间传递数据。但是,在多线程应用程序中,您必须使用某种类型的同步来确保数据完整性并防止死锁。
答案 1 :(得分:0)
如果要从外部修改的“线程数据”是在线程中运行的函数中的局部变量形式,或者使用__thread
扩展名创建的特定于线程的数据,那么只有方式你可以从外面修改它们(UB的模数代码,技术上只是破坏内存)是让线程获取其变量的地址并存储在其他线程可以看到它的地方(在全局变量中) ,或通过线程启动函数的void *
参数传入的位置。
另请注意,正如重新运行所指出的,如果多个线程正在访问相同的数据,则必须使用某种同步方法。唯一的标准/可移植同步方法是pthread:pthread_mutex_lock
等,但您也可以使用汇编或编译器内在函数(如gcc中的__sync_*
)。