编写线程安全的UNIX代码的提示?

时间:2010-06-27 14:19:12

标签: c unix multithreading thread-safety

用C和C ++编写线程安全的UNIX代码有哪些指导原则?

我只知道几个:

  • 不要使用全局
  • 不要使用静态本地存储

其他人在那里?

4 个答案:

答案 0 :(得分:6)

简单的事情是阅读一点。以下列表包含一些需要研究和研究的内容。

  1. 花时间阅读Open Group Base Specification,尤其是General Information部分和subsection on threads。这是大多数UN * X系统下多线程的基础信息。
  2. 了解difference between a mutex and a semaphore
  3. 意识到共享的所有内容必须受到保护。这适用于全局变量,static变量以及任何共享的动态分配内存。
  4. 将全局状态标志替换为condition variables。这些是使用pthread_cond_init和相关功能实现的。
  5. 了解基础知识后,请了解常见问题,以便在发生时识别它们

答案 1 :(得分:2)

真正归结为共享状态,全局变量和静态局部是共享状态的示例。如果您不共享状态,则不会有问题。共享状态的其他示例包括多个线程写入文件或套接字。

任何共享资源都需要正确管理 - 这可能意味着要对互斥锁进行保护,打开另一个文件或智能地序列化请求。

如果两个线程正在从同一个结构读取和写入,则需要处理该情况。

答案 2 :(得分:1)

谨防sem_t函数,它们可能会在中断,IO,SIGCHLD等上返回未完成。如果您需要它们,请确保始终捕获该情况。

对于pthread_mut_t

pthread_cond_tEINTR函数是安全的。

答案 3 :(得分:0)

这里有一本关于并发性的好书,可以在这里找到:Little Book of Semaphores

它提出了逐步解决的各种问题,并包括常见并发问题的解决方案,如饥饿,竞争条件等。 它不是特定于语言的,而是包含有关使用Pthread-Library或Python在C中实现解决方案的简短章节。