记录一个多线程用来收发数据的数据结构,以及一点踩坑日记
正文 我有两个线程,一个线程专门用来收数据,一个线程专门用来发数据,因此我有两个list结构的链表,一个用来收数据,一个用来发数据,暂称为recvlist和sendlist;为了确保线程安全,我使用了两个锁。 代码逻辑是这样的: recvlist在一般情况下含有多个元素,而sendlist正常情况下是空的。两个线程同时工作,每次接收线程在接收数据的时候,就弹出recvlist头部的元素,填充之后,就将该元素放入sendlist中。而发送线程检测到sendlist不为空时,就将sendlist中的元素弹出来,发送出去。循环往复 逻辑是没毛病的,下面看实际实现过程: 首先是对两个list存取数据的操作: void buf_put(std::list<type* >&list, type* element, pthread_mutex& mutex) { // 加锁 pthread_mutex_lock(mutex); // 将元素压入list尾部:如果是recvlist,尾部数据已经不需要再使用了 list.push_back(element); //....