1.wait()会使线程阻塞住,放到阻塞队列中,当执行notify_all的时候,回将阻塞队列中所有的线程置于CPU的阻塞态,然后这些线程争夺互斥量,哪个线程获得了互斥量,就从阻塞态转为就绪态,获得CPU的调度和执行,转为执行态
如果是nitify_one只会将其中的一个线程从阻塞队列中置于CPU的阻塞态,然后获得互斥量,从阻塞态转为就绪态,获得CPU的调度和执行,转为执行态
wait()会将资源释放掉
2.线程分配的栈空间的大小是1M,线程分配的栈空间是内核分配来的
3.信号量有二元信号量,只有1和0
4.release 增加内部计数器并除阻获取者(公开成员函数)p 就是要释放资源
5.acquire 增加内部计数器
6.pv操作是原子的
7.信号量中的值如果大于0,代表的是资源的个数,如果咸鱼0,代表阻塞线程的个数
8.计数信号量std::counting_semaphore
9.二元信号量std::binary_semaphore
10.生产者消费者问题在多线程中,如果只有一个生产者一个消费者,就不用加互斥量,如果有两个生产者,就必须加互斥量,而且常常使用块作用域
11.自己写一个pv操作
MySemaphore semp(1);中的这个1,既是资源的个数,也是并发线程的个数
MySemaphore semp(1);//生产 MySemaphore sems(0);//消费 一个设置成大于0,一个设置成0的目的是什么,如果消费者先执行,0减一等于-1,就会阻塞,所以目的就是让生产者先执行,而消费者后执行
class MySemaphore
{
private:
int count;
std::mutex mx;
std::condition_variable cv;
public:
MySemaphore(int val = 1