加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Visual C++中的多线程

发布时间:2021-07-06 05:51:10 所属栏目:大数据 来源: https://blog.csdn.net/dragonf
导读:? 在C++里面创建和终止线程的函数为:_beginthread和_endthread两个函数,当然,也可以用CreateThread和ExitThread。具体的使用方式可以查看msdn。 那么,怎么样实现加锁与同步呢?可以使用createMutex函数以及createEvent方法等来实现,具体可以参考下例: #
在C++里面创建和终止线程的函数为:_beginthread和_endthread两个函数,当然,也可以用CreateThread和ExitThread。具体的使用方式可以查看msdn。

那么,怎么样实现加锁与同步呢?可以使用createMutex函数以及createEvent方法等来实现,具体可以参考下例:

#include < iostream>

#include
windows.h


using namespace std;

#define BUFSIZE 5

int SharedBuffer[BUFSIZE];

head,tail;

count;

HANDLE hMutex;

HANDLE hNotFullEvent,hNotEmptyEvent;

void BB_Producer()
...{
int i;
for (i=20; i>=0--) ...while(1{
WaitForSingleObject(hMutex,INFINITE);
if (count == BUFSIZE) { // 缓冲区满
ReleaseMutex(hMutex);
等待直到缓冲区非满WaitForSingleObject(hNotFullEvent,255)">continue;
}
得到互斥锁且缓冲区非满,跳出while循环breakcout << "Produce: i endl;
SharedBuffer[tail]
i;
tail
(tail+) % BUFSIZE;
count
++;
ReleaseMutex(hMutex);
结束临界区PulseEvent(hNotEmptyEvent); 唤醒消费者线程}
}
BB_Consumer()
result;
( 没有可以处理的数据ReleaseMutex(hMutex); 释放互斥锁且等待
等待直到缓冲区非空WaitForSingleObject(hNotEmptyEvent,INFINITE);
}
else (SharedBuffer[head] {
cout
Consumed 0: end of data endl;
ReleaseMutex(hMutex);
ExitThread();
}
获得互斥锁且缓冲区有数据,开始处理result SharedBuffer[head];
cout
Consumed: result endl;
head
(headPulseEvent(hNotFullEvent); 唤醒生产者线程
}
main()
{
HANDLE hThreadVector[
2];
DWORD ThreadID;
count
;
head
;
tail
;
hMutex
CreateMutex(NULL,FALSE,NULL);
hNotFullEvent
CreateEvent(NULL,TRUE,NULL);
hNotEmptyEvent
] CreateThread (NULL,,
(LPTHREAD_START_ROUTINE) BB_Producer,
NULL,(LPDWORD)
&ThreadID);
hThreadVector[
ThreadID);
WaitForMultipleObjects(
http://tb.blog.csdn.net/TrackBack.aspx?PostId=1355892

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

?
    推荐文章
      热点阅读