读书人

【请问】C语言多线程编程

发布时间: 2012-09-10 11:02:33 作者: rapoo

【请教】C语言多线程编程
我刚参加工作还在实习,没学过多线程编程,不太会用,我遇到到很麻烦的问题 希望能得到大家的帮忙。
是这样的,有个 download()函数,有12个线程同时调用这个函数,这个函数里面有个扫USB口的动作,就是12线程同时扫COM口,传口的时候 发现有不同线程抢到的同一个COM口了 导致download()函数不能正常工作,现在 就想,有没有办法让 扫COM口和传口 这段代码 不同时被多个线程执行,就是同时只能有一个线程在访问,其他线程在等待,我在网上搜到了,好像是可以用 Entercriticalsection 这个函数,但是我在网上找了半天也不知道这个函数具体怎么使用。希望能得到大家的帮助 谢谢了,还有 我想学习多线程编程 入门使用什么书籍好呢?

[解决办法]
重新组织一下,一个关键的地方有点模糊:
需要用到互斥锁的概念了,如下:
CRITICAL_SECTION m_cs;
InitializeCriticalSection((&m_cs); //初始化,整个进程中只执行一次

DeleteCriticalSection(&m_cs);//整个进程中只执行一次,进程退出时用

每个线程中用法如下:
EnterCriticalSection(&m_cs); //本线程开始操作共享串口,如果其它线程已经使用了该临界区对象的话,本线程执行到这里只能等待了,等待其它线程释放该临界区对象,也就是不再对串口操作了,该线程才能往下执行

......//你的串口操作代码
LeaveCriticalSection(&m_cs); //本线程退出操作该共享串口




[解决办法]
看看这个吧
http://www.vckbase.com/document/viewdoc/?id=1704
[解决办法]

C/C++ code
lock();foreach (com_list as com) {    if (com->status is idle) {         com->status = handled;         com_to_handle = com;    }}unlock();if (com_to_handle) {handle(com_to_handle);} 

读书人网 >C语言

热点推荐