VC 的多线程问题!!!

来源:百度知道 编辑:UC知道 时间:2024/06/11 09:35:26
我用的是CreateThread();函数创建了多个线程,想问一下,当两个线程同时访问一个队列的时候,一个线程存储,一个线程读取,会不会造成数据的异常,如果会的话,该怎么解决呢,用什么样的函数?

分数不多,全押上了...........
队列的读写是用的队头和队尾指针进行操作的,会不会在读的时候,写操作影响了指针,产生异常,或者是说,当读到最后一个数据的时候,也就是队列里没有数据,写操作正在往里插入数据,读操作来了,这样会产生异常吗?
顺便问一下,用同一个Socket两个线程同时进行收发操作,会不会产生异常?谢谢.............

那得看你的处理机制
用的是队列 先进先出得话 ,一读一写 , 写的线程应该是不会对已经存入的数据进行改变的是吧? 那么读就是安全的。

要考虑到的一个问题就是读和写得速度控制:写得过快对队列占用内存的影响,读的过快得话读线程得等候写线程。。

相关函数
CreateMutex
WaitForSingleObject
ReleaseMutex

----------------------------------------------

想了一下,的确会有问题。

不知道你的队列是怎么实现的

对于正在读的时候切换到写:

要是队列用的数组,那么当正在读首元素时线程切换到写,写操作又需要realloc一块内存,那么首元素的地址就改变了。。。这里可能会有问题。

要是是链表,写操作是不会影响到正在读的操作的。

对于空队列正在写的时候切换到读:

那么你需要保证能读的时候写操作应该完毕了,恩,得用互斥体临界区之类的东西。

------------------------------

Socket 一收一发是没问题的,都收发的话异常倒是不会,逻辑上不是乱了嘛?

这种情况,一定要考虑数据临界问题..