永发信息网

vc++ 能不能获取信号量的值?

答案:1  悬赏:70  手机版
解决时间 2021-05-14 19:00
  • 提问者网友:謫仙
  • 2021-05-14 07:17

用vc++模拟多线程同步和互斥(生产者消费者问题)。

现在定义如下信号量:

HANDLE m_S_Empty; // 生产者Semaphore
HANDLE m_S_Full; // 消费者Semaphore
HANDLE m_M_Mutex; //互斥

//----------------------------

m_S_Empty = CreateSemaphore(NULL,N,N,NULL);//初始计数为N
m_S_Full = CreateSemaphore(NULL,0,N,NULL);//初始计数为0
m_M_Mutex = CreateMutex(NULL,FALSE,NULL);//
然后,用

if (WaitForSingleObject(m_S_Full,INFINITE) == WAIT_OBJECT_0)
以及
if (WaitForSingleObject(m_M_Mutex,INFINITE) == WAIT_OBJECT_0)

实现线程同步和互斥。

现在问题是,我能不能实时知道,m_M_Mutex,m_S_Empty,m_S_Full这三个信号量的值?

最佳答案
  • 五星知识达人网友:爱难随人意
  • 2021-05-14 08:43

可以设置一些标志来查询信号量的值


初始的时候都默认为信号机未触发


boo S_Empty_State=false; // 是否触发


int S_Empty_Count=N; // N个计数可用资源



在使用等待的时候如果遇到触发则修改结果


S_Empty_State=true; //已经触发


S_Empty_Count--; // 可用资源数-1



资源释放时


S_Empty_Count++; // 可用资源数+1



需要查询时检查以上两个变量




我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯