c – 如何同步三个相关线程
作者:互联网
如果我有
1. mainThread: write data A,
2. Thread_1: read A and write it to into a Buffer;
3. Thread_2: read from the Buffer.
如何安全地同步这三个线程,没有太大的性能损失?有没有现成的解决方案?我在linux上使用C/C++.
重要提示:目标是了解此特定情况的同步机制或算法,而不是互斥锁或信号量的工作原理.
解决方法:
首先,我考虑将这个构建为三个独立进程的可能性,使用管道连接它们.管道(本质上)是一个小缓冲区,内核自动处理锁定.如果您最终使用线程,那么大部分时间/精力将花费在创建内核中已经内置的管道的几乎完全重复上.
其次,如果您决定自己构建这一切,我会认真考虑遵循类似的模型.你不需要对它嗤之以鼻,但我仍然主要考虑一个线程写入数据的数据结构,以及另一个线程从中读取数据的数据结构.通过强烈的偏好,所有必要的线程锁定都将构建到该数据结构中,因此线程中的大多数代码都非常简单,即读取,处理和写入数据.与使用普通Unix管道的主要区别在于,在这种情况下,您可以以更方便的格式维护数据,而不是以文本形式进行所有读写.
因此,我认为你正在寻找的基本上是一个线程安全的队列.有了这个,几乎所有其他涉及的东西变得微不足道(至少它的线程部分 – 所涉及的处理可能不是,但至少用多线程构建它并没有增加复杂性).
标签:multitasking,c,multithreading,thread-safety,multiprocessing 来源: https://codeday.me/bug/20190826/1731288.html