【发布时间】:2011-03-08 20:16:02
【问题描述】:
用 C 和 C++ 编写线程安全的 UNIX 代码的准则是什么?
我只知道几个:
- 不要使用全局变量
- 不要使用静态本地存储
还有哪些?
【问题讨论】:
-
请将投票问题标记为“社区维基”。
标签: c unix multithreading thread-safety
用 C 和 C++ 编写线程安全的 UNIX 代码的准则是什么?
我只知道几个:
还有哪些?
【问题讨论】:
标签: c unix multithreading thread-safety
可以在这里找到一本关于并发性的好书:Little Book of Semaphores
它介绍了逐步解决的各种问题,包括解决饥饿、竞争条件等常见并发问题的解决方案。 它不是特定于语言的,但包含有关使用 Pthread-Library 或 Python 用 C 语言实现解决方案的简短章节。
【讨论】:
简单的事情就是读一点。以下列表包含一些可供查看和研究的内容。
static 变量和任何共享的动态分配内存。pthread_cond_init 和相关函数实现的。了解基础知识后,了解常见问题,以便您在何时识别它们:
【讨论】:
注意sem_t 函数,它们可能会在中断、IO、SIGCHLD 等上返回未完成。如果您需要它们,请务必始终捕获这种情况。
pthread_mut_t 和 pthread_cond_t 函数相对于 EINTR 是安全的。
【讨论】:
真正归结为共享状态,全局变量和静态局部变量是共享状态的示例。如果您不共享状态,则不会有问题。共享状态的其他示例包括多个线程写入文件或套接字。
任何共享资源都需要妥善管理 - 这可能意味着使某些东西受到互斥锁保护、打开另一个文件或智能地序列化请求。
如果两个线程从同一个结构读取和写入,您需要处理这种情况。
【讨论】: