社区
C语言
帖子详情
怎样在c++里实现进程同步?
omrhal
2002-11-13 03:55:09
本人要写5哲学家就餐问题,用到5个函数进程p1(),P2(),P3(),
P4(),P5();需要同步执行,请问该怎么做?
...全文
465
7
打赏
收藏
怎样在c++里实现进程同步?
本人要写5哲学家就餐问题,用到5个函数进程p1(),P2(),P3(), P4(),P5();需要同步执行,请问该怎么做?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ljf1107
2002-11-21
打赏
举报
回复
ok
eion
2002-11-21
打赏
举报
回复
我来了,别耍赖,我个人要 50 分!
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#define N 4 /* 哲学家的个数 */
#define P(S) WaitForSingleObject(S, INFINITE) // 定义Windows下的P操作
#define V(S) ReleaseSemaphore(S, 1, NULL) // 定义Windows下的V操作
typedef HANDLE Semaphore; // 信号量的Windows原型
HANDLE hThread[N]; // 线程计数
Semaphore S[N]; // N根筷子, N个信号量
// 对每个哲学家的线程
DWORD WINAPI Philosopher(LPVOID para)
{
// i表示第i个哲学家
int i = *(int *)para, j;
int period = 10 * (i+1);
// j只是用来打印缩进用
char s[10] = "";
for (j=0; j<i; j++) strcat(s, "\t\t");
while ( 1 )
{
printf("%s%03d: think...\n", s, i);
Sleep(1*period);
printf("%s%03d: Hungry\n", s, i);
Sleep(2*period);
printf("%s%03d: Get %d ...\n", s, i, i);
P(S[i]);
printf("%s%03d: Got %d OK\n", s, i, i);
Sleep(period);
printf("%s%03d: Get %d ...\n", s, i, (i+1)%N);
P(S[(i+1)%N]);
printf("%s%03d: Got %d OK\n", s, i, (i+1)%N);
printf("%s%03d: Eating ...\n", s, i);
Sleep(2*period);
printf("%s%03d: Eaten.\n", s, i);
printf("%s%03d: Put down %d\n", s, i, i);
V(S[i]);
printf("%s%03d: Put down %d\n", s, i, (i+1)%N);
V(S[(i+1)%N]);
printf("\n");
}
return 0;
}
int main(int argc, char *argv[])
{
DWORD tid;
int i=0;
char sTmp[32];
// 初始化信号量
for (i=0; i<N; i++)
{
wsprintf(sTmp, "chopsticks=%d", i);
S[i] = CreateSemaphore(NULL, 1, 1, sTmp);
if ( !S[i] )
{
printf("Create S Error!\n");
return -1;
}
}
// 开启5个哲学家线程
for (i=0; i<N; i++)
{
hThread[i] = CreateThread(NULL, 0, Philosopher, &i, 0, &tid);
if ( hThread[i] ) WaitForSingleObject(hThread[i], 100);
}
// 等待哲学家执行
WaitForMultipleObjects(N, hThread, TRUE, INFINITE);
return 0;
}
hello_wyq
2002-11-14
打赏
举报
回复
互斥不就可以了吗?
xspf
2002-11-14
打赏
举报
回复
是不是哲学家两只手就餐问题,要求同时锁住两个“资源”,避免死锁?
如果是这个问题,可以用mutex配合WaitForMultipleObjects一同时锁住两个资源,用CreateMutex()可以建立一个mutex。
omrhal
2002-11-14
打赏
举报
回复
如果是在win98或2000里该怎么搞呢?是不是用c++不行?
terron
2002-11-13
打赏
举报
回复
进程?线程?
codingcoding
2002-11-13
打赏
举报
回复
这个要有具体的操作系统来参与了。
【
进程同步
】使用信号量
实现
进程同步
(附
C++
实现
代码)
从
进程同步
讲起,阐述了同步的意义,进而详细介绍了信号量如何使用从而保证
进程同步
。
C++
使用临界区
实现
进程同步
进程同步
在多线程应用程序中是非常重要的,
实现
进程同步
也有很多方法,可以利用互斥锁,可以利用事件,这两种方法可以查阅MSDN相关部分,主要看如何利用临界区
实现
进程同步
#include #include using namespace std; DWORD WINAPI threadFun1( LPVOID lpParameter // 线程1的线程函数声明 ); DWOR
进程同步
与互斥——理发师问题源码
实现
(sleeping barber problem)
理发师问题描述: (1)理发店
里
有一位理发师、一把理发椅和n把供等候理发的顾客坐的椅子 (2)如果没有顾客,理发师便在理发椅上睡觉 (3)一个顾客到来时,它必须叫醒理发师 (4)如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,就坐下来等待,否则就离开 问题分析: 1、对于理发师问题而言,是生产者-消费者(有界缓冲区)模型的一种。其中理发师和顾客之间涉及到进程之间的同步问题,理发师是生产者,顾客是消费者,生产者生产的速度(理发师理发的速度),和消费者消费的速度(顾客来到理发店的时间),这两者肯定是不同的
C++
的
进程同步
和异步
一、
进程同步
及异步的概念: 1、同步:发出一个功能调用时,在没得到结果前,该调用永不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。就想起床要先刷牙、后吃饭,不能同时做。 按照这个定义,其实绝大多数函数都是同步调用(例如 sin,isdigit 等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 sendm
计算机操作系统【
进程同步
】
本次实验通过分析进程的同步与互斥现象,编程
实现
经典的
进程同步
问题——生产者与消费者问题的模拟,进一步加深了对
进程同步
与互斥的理解。分析进程的同步与互斥现象,编程
实现
经典的
进程同步
问题——生产者与消费者问题的模拟,进一步加深对
进程同步
与互斥的理解。(3)ReleaseMutex()//该函数放弃指定互斥对象的拥有权。HANDLE hHandle,//等待对象的线程HANDLE,或者仅仅是一个句柄,如信号量。(4)CreateSemaphore()//创建信号量,返回信号量对象的句柄。
C语言
70,040
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章