从线程外部修改线程数据

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

要回复问题请先登录注册