Semaphore,我们可以ReleaseSemaphore,减1,有没有加1的函数?

darkread 2004-09-07 03:55:51
问题同上
...全文
697 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
microyzy 2004-09-08
  • 打赏
  • 举报
回复
waitfor成功之后会减一
release应该是加一
oyljerry 2004-09-08
  • 打赏
  • 举报
回复
每增加一个线程对共享资源的访问,当前可用资源计数就会减1
通过ReleaseSemaphore是加一。
xdljf 2004-09-07
  • 打赏
  • 举报
回复
// 信号量对象句柄
HANDLE hSemaphore;
UINT ThreadProc15(LPVOID pParam)
{
 // 试图进入信号量关口
 WaitForSingleObject(hSemaphore, INFINITE);
 // 线程任务处理
 AfxMessageBox("线程一正在执行!");
 // 释放信号量计数
 ReleaseSemaphore(hSemaphore, 1, NULL);
 return 0;
}
UINT ThreadProc16(LPVOID pParam)
{
 // 试图进入信号量关口
 WaitForSingleObject(hSemaphore, INFINITE);
 // 线程任务处理
 AfxMessageBox("线程二正在执行!");
 // 释放信号量计数
 ReleaseSemaphore(hSemaphore, 1, NULL);
 return 0;
}
UINT ThreadProc17(LPVOID pParam)
{
 // 试图进入信号量关口
 WaitForSingleObject(hSemaphore, INFINITE);
 // 线程任务处理
 AfxMessageBox("线程三正在执行!");
 // 释放信号量计数
 ReleaseSemaphore(hSemaphore, 1, NULL);
 return 0;
}
……
void CSample08View::OnSemaphore()
{
 // 创建信号量对象
 hSemaphore = CreateSemaphore(NULL, 2, 2, NULL);
 // 开启线程
 AfxBeginThread(ThreadProc15, NULL);
 AfxBeginThread(ThreadProc16, NULL);
 AfxBeginThread(ThreadProc17, NULL);
}
DentistryDoctor 2004-09-07
  • 打赏
  • 举报
回复
没有这样的API,但<windows核心编程>一书的10.2实现了一个反信标。
sunny2zhang 2004-09-07
  • 打赏
  • 举报
回复
waitfor....object是占用一(N)个信号,使可用信号-1(N)
sunny2zhang 2004-09-07
  • 打赏
  • 举报
回复
茫然??ReleaseSemaphore就是释放一个占用信号使可用信号+N 啊(N>=0)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧