【发布时间】:2020-08-25 00:52:42
【问题描述】:
在尝试使用 c11 threads.h 和互斥锁来同步网络线程和主线程时,我开始使用以下过程:
-在主函数中定义一个互斥体
mtx_t mutex_network_acqbuffer;
-用
初始化它mtx_init(&mutex_network_acqbuffer,mtx_plain);
-将此互斥体的指针分配给作为起始参数传递到我的网络线程中的堆分配结构的成员
-在主线程/网络线程中锁定互斥体,以确保堆中的某些数据不会同时访问。
但我不确定这是否是正确的方法,或者我很幸运我的编译器没有破坏我的代码。
我认为互斥锁驻留在主线程的堆栈中,所以子线程应该不能访问它,因为它应该只能访问堆分配的东西或全局变量。
但同步似乎工作。
在 mtx_init 中是否存在一些将互斥体放置在堆上的魔术技巧? 或者这只是实现依赖? 我应该将主线程中的互斥锁分配到保存端/使其成为全局变量吗?
【问题讨论】:
-
对我来说听起来不错。没有问题(除了生命周期问题),在一个线程中取消引用指向存储在另一个线程堆栈中的对象的指针。只要对象仍然存在,您就可以访问它。
标签: c multithreading mutex c11 threads.h