与子线程共享存储在主线程堆栈中的互斥锁
Sharing mutexes stored on the main thread's stack with a child thread
在尝试使用 c11 threads.h 和互斥体来同步网络 thead 和主线程时,我开始使用以下过程:
-在main函数中定义一个mutex
mtx_t mutex_network_acqbuffer;
-用
初始化它
mtx_init(&mutex_network_acqbuffer,mtx_plain);
-将此互斥锁的指针分配给作为起始参数传递到我的网络线程的堆分配结构的成员
-在主线程/网络线程中锁定互斥量以确保不会同时访问堆中的某些数据。
但我不确定这是否是正确的方法,或者我是否很幸运我的编译器没有破坏我的代码。
我认为互斥量驻留在主线程的堆栈中,因此子线程不应该能够访问它,因为它应该只能访问堆分配的东西或全局变量。
但同步似乎仍然有效。
mtx_init 内部是否涉及一些将互斥锁放在堆上的魔术技巧?
或者这只是依赖于实现?
我应该在主线程中 malloc 互斥量以保存 side/make 它是一个全局变量吗?
在 C11 中,堆栈上的对象是否可以从不同线程访问的事实是 implementation-defined。
不过,我个人不知道有任何实现不允许从其他线程访问。
在尝试使用 c11 threads.h 和互斥体来同步网络 thead 和主线程时,我开始使用以下过程:
-在main函数中定义一个mutex
mtx_t mutex_network_acqbuffer;
-用
初始化它mtx_init(&mutex_network_acqbuffer,mtx_plain);
-将此互斥锁的指针分配给作为起始参数传递到我的网络线程的堆分配结构的成员
-在主线程/网络线程中锁定互斥量以确保不会同时访问堆中的某些数据。
但我不确定这是否是正确的方法,或者我是否很幸运我的编译器没有破坏我的代码。
我认为互斥量驻留在主线程的堆栈中,因此子线程不应该能够访问它,因为它应该只能访问堆分配的东西或全局变量。
但同步似乎仍然有效。
mtx_init 内部是否涉及一些将互斥锁放在堆上的魔术技巧? 或者这只是依赖于实现? 我应该在主线程中 malloc 互斥量以保存 side/make 它是一个全局变量吗?
在 C11 中,堆栈上的对象是否可以从不同线程访问的事实是 implementation-defined。 不过,我个人不知道有任何实现不允许从其他线程访问。