进程可以理解为一个应用,那么线程则可以看为一个进程中的多个执行单元(一个进程可以启动多个线程);
1.管道
2.消息队列
3.信号量
信号量不同于一般的ipc,它是一个·计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通行数据。
信号量用于进程间同步,若要在进程传递数据需要结合·共享内存
信号量基于操作系统操作系统的pv操作,程序对信号量的操作都是原子操作
每一次信号量的pv操作不仅仅限于对信号量值的+1或-1,而且可以加减任意正整数
支持信号量组
4.共享内存
共享内存是最快的一种进程间通信 IPC(Inter-Process Communication),因为进程直接对内存进行读取。
因为多个进程可以同时操作,所以需要进行同步。
信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。
两个进程间的线程同学,相对于进程通信。
一个进程中的两个线程通信:
1.互斥锁
mutex;
lock_guard(在构造函数中加锁,在析构函数中解锁)
unique_lock 自动加锁,解锁
2.读写锁
shared_lock
3.信号量
mian函数结束只是主线程结束了,主栈空了,其他栈(线程)可能还在压栈弹栈。
单核cpu在一个时间点只能处理一个事情,但是由于cpu运行速度极快,可以在多个线程之间频繁执行切换操作,从而给人的感觉是:多件事情同时在做!!
t1 线程执行t1的,t2线程执行t2的,两者互不干扰,这叫做多线程并发
新建状态(刚new出来线程对象)—(start())—>就绪状态;
就绪状态—(jvm调度)—>运行状态—(调用run运行结束后)—>死亡状态;
运行状态—(遇到阻塞事件,调用sleep,join方法)—>阻xianh塞状态;
join方法介绍:A线程调用了b线程的join()后,会等待b线程执行完毕,
在b线程没有执行完毕前,a线程会一直处于阻塞状态。举了个例子如下所示: