如何实现多个线程写、一个线程读的队列,并且所有线程间不需要等待同步
来源:互联网 发布:2017mac 关机 快捷键 编辑:程序博客网 时间:2024/06/05 00:39
讨论切换线程的函数:
SwitchToThread(); // 切换到其他线程,即使其他线程优先级比自己低也会切换
sleep(0);// 切换到其他线程,只能切换到比自己优先级高或者同等优先级的线程,不会切换到低优先级线程。
首先设计一个一线程写一线程读的队列,拥有读写2个指针。
读线程:
1、首先判断读写指针,如果读指针==写指针,那么返回无数据,否则读取数据,然后读指针+1.
写线程:
1、(如果使用循环队列)写线程进入以后检查读写指针,如果读指针=写指针+1,那么写线程进入线程切换,直到读指针移动之后继续写入。(如果数据是允许丢弃的实时数据的话也可以不做判断);// 为了能原子操作数据,最好在循环队列里保存指针
2、写指针写入数据,并+1;
下面来考虑多个线程同时写时如何实现。
首先申请一个TLS值(建议使用运行库的,不要使用API,因为API一个进程最多只能申请255个,很容易用完)
然后每个线程保存一个上面实现的一线程读一线程写队列,同时把队列地址放在一个结构里保存;
每个写线程都把数据写到自己的线程拥有的队列里,每个数据需要同时保存一个时间计数(GetSystemTimeAsFileTime),用来判断各个队列中节点的先后顺序。
读线程依次遍历所有队列,把里面的值取出,并按照时间计数排列顺序处理。
具体代码等空闲时候再加上。
- 如何实现多个线程写、一个线程读的队列,并且所有线程间不需要等待同步
- 一个线程写一个线程读的队列
- MFC - 如何等待多个线程结束
- 如何实现线程的同步
- 线程的队列与等待
- 多个线程共同的等待一个操作
- 用信号量实现 多个线程间的同步(sem)
- 如何实现线程同步
- CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待
- JAVA多线程—CountDownLatch-一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
- java中对线程的实现 等待多个子线程结束 多个子线程运行中进行同步
- 线程安全的无锁RingBuffer的实现【一个读线程,一个写线程】
- linux 线程等待队列
- 等待一个线程的结束
- 如何线程的同步
- java如何实现线程的安全:线程的同步机制
- 问题: 写一个多线程程序实现铁路卖票系统,4个窗口同时售票,线程同步
- android开启多个线程网络获取数据后,等待所有线程完毕后跳转
- Delphi应用程序的调试(三)监视变量
- HDU 1171 Big Event in HDU(多重背包)
- loadrunner监控windows资源(三)
- loadrunner的参数化(二)
- jquery
- 如何实现多个线程写、一个线程读的队列,并且所有线程间不需要等待同步
- 如何把自己的app发布到google market
- 搓错排相关知识
- java.util.Properties类的使用
- loadrunner中回放socket录制的脚步卡死(四)
- IO的DataInputStream和DataInputStream类数据写入和读出
- HDC 保存为BMP图片步骤
- Loadrunner中对中文进行UTF-8转码的探索(五)
- stm32(二) stm32中断优先级的设置