c - 非线程安全库和线程

标签 c

将非线程安全库与线程一起使用。假设我有一个与服务器连接的库。而且它是非线程安全的。我可以在 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/

相关文章:

c++ - C 和 C++11 中系统时钟的性能

c - 如何访问数组的移动部分

c - 两条语句中的 strncmp 比一条语句中花费更多时间

c - srtok 在 c 中不工作

c - 如何以可移植的方式从指向结构成员的指针计算指向结构开头的指针?

c++ - Arduino WiFi UDP上传问题

c - C 中的动态字符串数组

c - 如何在 C 中使用结构体指针

c - Alphasort 的功能

c - fscanf 的哪个占位符?