c++ 线程间通信方式

一:两个进程间的两个线程通信,相当于进程间通信

二:一个进程中的两个线程间通信

  通信方式:

1.互斥锁

  mutex;

  lock_guard (在构造函数里加锁,在析构函数里解锁)

  unique_lock 自动加锁、解锁

2.读写锁

  shared_lock

3.信号量

  c++11中未实现,可以自己使用mutex和conditon_variable 实现

  代码实现如下:

    

#pragma once
#include <mutex>
#include <condition_variable>
class Semaphore
{
public:
 explicit Semaphore(unsigned int count); //用无符号数表示信号量资源 
 ~Semaphore();

public:
 void wait();
 void signal();
private:
 int m_count; //计数器必须是有符号数 
 std::mutex m_mutex;
 std::condition_variable m_condition_variable;
};

#include "Semaphore.h"

Semaphore::Semaphore(unsigned int count) :m_count(count) {
}

Semaphore::~Semaphore()
{
}

void Semaphore::wait() {
 std::unique_lock<std::mutex> unique_lock(m_mutex);
 --m_count;
 while (m_count < 0) {
  m_condition_variable.wait(unique_lock);
 }
}

void Semaphore::signal() {
 std::lock_guard<std::mutex> lg(m_mutex);
 if (++m_count < 1) {
  m_condition_variable.notify_one();
 }
}

4.条件变量

  condition_variable

原文地址:https://www.cnblogs.com/jobs1/p/10784021.html

时间: 2024-10-10 13:48:55

c++ 线程间通信方式的相关文章

Linux的进程/线程间通信方式总结

Linux系统中的进程间通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程通信方式:包括信号量(Semaphore), 消息队列(Message Queue), 和共享内存(Shared Memory) 网络主机间的进程通信方式 * RPC: Remote Procedure Call 远程过程调用 * Socket: 当前最流行的网络通信方式, 基于TCP/IP协议的通

进程及线程间通信方式总结

进程间通信方式 传递数据的方式 1.pipe 必须是有亲缘关系的进程之间使用,平时用"ls | grep abc"等命令时用得就是这个,这个"|"我猜测是用了两种系统调用实现,一个是pipe(popen),一个是dup2,没有看过bash或sh的源码,只是猜测. 2.fifo 会在文件系统中产生一个管道文件. 3.socket 有一个unix域套接字,可用作进程间通信,但有说法posix消息队列的性能优于systemv消息队列,systemv消息队列性能优于unix

进程间,线程间通信方式

一.进程间的通信方式 1 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系.2 有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信.3 信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问.它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源.因此,主要作为进程间以及同一进程内不同线程之间的同步手段.

线程间通信方式

一,线程通信简介 一般而言,在一个应用程序中(即同一个进程),一个线程往往不是孤立存在的,常常需要和其它线程通信,以执行特定的任务.如主线程和次线程,次线程和次线程之前,工作线程和用户界面线程等,这样的话,线程之间必定有一个信息传递的渠道.这种线程间的通信不但难以避免,而且在多线程的编程中,也是复杂和繁琐的.线程间的通信涉及到4个问题: 线程间如何通信 线程之间如何同步,使一个线程的活动不会破话另一个线程的活动,以保证计算结果的正确合理 当线程间具有依赖关系时,如何调度多个线程的处理顺序 如何避

线程间通信原理

从操作系统的角度讲,线程间通信比进程间通信要容易的多,因为线程之间可以共享进程的内存空间.因此,他们可以共享位于进程全局数据区和栈和堆上的所有内容. 唯一只属于某个线程的就是线程的栈-------它可以存放只属于线程的对象. 下面逐一解读线程间通信方式: 1.   共享进程的变量 这是最基本的通信方式,但要注意不要共享线程栈上的变量,因为它随时可能被某个线程销毁,而另一个线程就无法访问它了. 所以Java编译器不允许使用栈上的变量来共享. 例子1: 如下面这个编译器是会报错的, protecte

进程与线程间的通信方式

一.进程间的通信方式 # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. # 有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信. # 信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问.它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源.因此,主要作为进程间以及同一进程内不同线程之间的同步手

JAVA多线程之线程间的通信方式

一,介绍 本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码. 二,线程间的通信方式 ①同步 这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信. 参考示例: public class MyObject { synchronized public void methodA() { //do something.... } synchronized public void methodB()

线程间的通信方式以及线程与进程的区别

1.锁机制     1.1 互斥锁:提供了以排它方式阻止数据结构被并发修改的方法.     1.2 读写锁:允许多个线程同时读共享数据,而对写操作互斥.     1.3 条件变量:可以以原子的方式阻塞进程,直到某个特定条件为真为止.对条件测试是在互斥锁的保护下进行的.条件变量始终与互斥锁一起使用.2.信号量机制:包括无名线程信号量与有名线程信号量3.信号机制:类似于进程间的信号处理.线程间通信的主要目的是用于线程同步,所以线程没有象进程通信中用于数据交换的通信机制. 进程和线程的区别?定义:进程

线程间的通信、同步方式与进程间通信方式

1.线程间的通信方式 1)使用全局变量(由于多个线程可能更改全局变量,因此全局变量最好声明为volatile) 2) 使用消息实现通信 3)使用事件CEvent类实现线程间的通信 2.同步/异步(C端) 同步:在C端发出一个功能调用时,没有得到结果之前就不返回 异步: 一个请求通过事件触发后,得到服务器处理后才处理完毕 3. 阻塞/非阻塞(S端) 阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行).函数只有在得到