This commit is contained in:
1AoB 2024-04-20 18:34:04 +08:00
parent b852ea6c8b
commit f434569f7d

View File

@ -115,7 +115,48 @@ auto_ptr是C++98中引入的第一个智能指针但是由于他的不安全
14.多线程中多个信号与主线程 14.多线程中多个信号与主线程
主线程一般是负责控制和协调其他线程的任务。比如说我这个共享单车项目中的服务器,他的主线程主要是负责监听客户端的连接,一旦有客户端来进行连接,我们就会把这个客户端通过libevent变成一个事件,并把他加入到事件集合中去,然后由其他线程来监听该客户端的读写事件,并通过轮询的方式拿到线程池中的一个线程,然后由这个线程通过调用它自己的回调函数来处理这个读写事件.相当于主线程就是是负责统筹规划的,他只复制监听客户端,剩下的交给其他线程.
然后我的毕设的服务器是只用到了libevent,没有用到线程池,毕设主要的项目亮点是硬件的uboot系统移植以及arm架构下的库的交叉编译,还有qt的自定义部件、界面以及qt打包等,最终形成一个完善的项目.
然后硬件是用到的一个多进程通信使用的是shm共享内存
在多线程编程中,主线程可以通过发送信号来与其他线程进行通信。
常见模式有:
1. **条件变量Condition Variables**:相当于是一种基于互斥锁的线程间同步机制,通常情况下是和锁一起使用的。主线程可以使用条件变量来等待特定的条件达成,而其他线程则可以通过发送信号来通知主线程条件的改变。一旦条件满足,主线程就会被唤醒并继续执行。
2. **事件Events**:事件也是一种用于线程间同步的通信机制,通常用于向其他线程发出信号以触发特定事件的发生,然后执行事件的回调函数。主线程可以等待某个事件的发生,其他线程可以通过发送信号来触发该事件。
3. **信号量Semaphores**
信号量维护一个计数器表示可用资源的数量。线程可以通过请求等待和释放发信号操作来获取和释放资源。当计数器为正时线程可以继续执行否则线程会被阻塞直到资源可用。就是我们常说的那个操作系统pv操作经常用来解决“生产者消费者的问腿”
伪代码:
```cpp
待补充。。。
```
4. **消息队列Message Queues**:主线程可以通过发送消息到队列中来通知其他线程,而其他线程则可以从队列中接收消息并执行相应的操作。