将非线程安全库与线程一起使用。假设我有一个与服务器连接的库。而且它是非线程安全的。我可以在 2 个线程内使用启动库吗?
即:
thread_1(){
telnet_lib_t *connection1;
while(1){
do_somestuff
}
free_telnet(connection1);
}
thread_2(){
telnet_lib_t *connection2;
while(1){
do_somestuff;
}
free_telnet(connection2);
}
这行得通吗?现在我有两个独立的库实例正在运行。所以他们不会互相干扰,对吗?
最佳答案
不,你不能这样做。如果库没有全局状态并且其函数只是内部非线程安全,您可以通过让整个库受互斥体保护并只允许一个线程一次访问它来解决问题(但这可能是令人望而却步的,特别是当库执行任何缓慢或阻塞的任务时)。但是,如果该库基本上具有它使用的单一全局状态,并且无法保存/恢复/交换状态,那么根本无法在多个线程中使用它(甚至无法在非线程程序中交替使用多个上下文) )。此类库通常被认为是垃圾,应该被替换。
关于c - 非线程安全库和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10003792/