社区
进程/线程/DLL
帖子详情
有关于mutex的问题
comman_wang
2003-11-07 04:26:37
在程序中要实现对某个文件的互斥访问,我采用了信号量同步的方法,但没有成功。
在create函数里初始化
HLogMutex=::CreateMutex(NULL,FALSE,"logmutex");
在访问函数中
::WaitForSingleObject(HLogMutex,INFINITE);
访问操作
::ReleaseMutex(HLogMutex);
这样方法正确吗?望高手指点。
...全文
59
6
打赏
收藏
有关于mutex的问题
在程序中要实现对某个文件的互斥访问,我采用了信号量同步的方法,但没有成功。 在create函数里初始化 HLogMutex=::CreateMutex(NULL,FALSE,"logmutex"); 在访问函数中 ::WaitForSingleObject(HLogMutex,INFINITE); 访问操作 ::ReleaseMutex(HLogMutex); 这样方法正确吗?望高手指点。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
comman_wang
2003-11-11
打赏
举报
回复
关于mutex的问题仍然没有解决,很是疑惑。不知是mutex还是文件操作函数CreateFile有问题,望高手分析一下。具体代码如下:(主要实现写文件功能,被多个线程调用,封装成一个函数)
::WaitForSingleObject(HLogMutex,INFINITE);
h_logfile=CreateFile(
"..\\logdata\\logdata.com",
GENERIC_WRITE,
0,
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
(HANDLE)NULL
);
dwError = GetLastError();
if(INVALID_HANDLE_VALUE==h_logfile)
{
CString str;
str.Format("log handle is invalid %d",dwError);
AfxMessageBox(str);
}
……
DWORD bResult=WriteFile( h_logfile,
log_str,
logstr_len,
&NumberOfBytesWrite,
NULL
);
if(h_logfile!=INVALID_HANDLE_VALUE)
{
DWORD CHerr=CloseHandle(h_logfile);
if(0==CHerr)
{
dwError = GetLastError();
CString str;
str.Format("close handle is fail. the errcode is %d",dwError);
AfxMessageBox(str);
}
}
::ReleaseMutex(HLogMutex);
长期运行后,会发生问题“log handle is invalid 32”,即文件访问冲突(正被另一进程使用),但CloseHandle没有发生错误(应该都成功了)。访问冲突的具体原因是什么呢?疑惑ing……
tomfool
2003-11-08
打赏
举报
回复
这个问题我刚问过,请看下面的帖子,
http://expert.csdn.net/Expert/topic/2427/2427683.xml?temp=.2488825
dawndu
2003-11-08
打赏
举报
回复
ownership只有一个线程会得到,就是调用WaitForSingleObject成功的那个,跟创建它的线程没有任何关系
得到ownership的那个线程无论WaitForSingleObject多少次都不会被锁住了,这个跟信号量是不一样的
vcforever
2003-11-07
打赏
举报
回复
你既然要用Mutex来进行线程同步,为什么还要多次Create他呢?
comman_wang
2003-11-07
打赏
举报
回复
但是有的时候会发生错误,很是疑惑。
CreateMutex初始化多次时,记数会被累加多次吗?
MSDN只说WaitForSingleObject函数有效时,该线程取得该Mutex的ownership,才能执行相关的任务。CreateMutex初始化多次后,会不会多个线程都取得该Mutex的ownership?
vcforever
2003-11-07
打赏
举报
回复
正确!
放手干吧!
成功!
c++关于
mutex
与bind冲突
问题
c++关于
mutex
与bind冲突
问题
介绍错误解决 介绍 类中有
mutex
成员 然后外部用了bind绑定这个类的某个函数 编译时会出错 错误 error: use of deleted function ‘std::
mutex
::
mutex
(const std::
mutex
&)’ 解决 ...
关于
Mutex
的构造函数参数设置
Mutex
的英文解释就是互斥体,也就是线程或者进程在同时访问一个资源的时候,是需要排他访问,也就是说一个时间段内只能有一个线程对象访问公共资源。
Mutex
的构造函数分为
Mutex
(),
Mutex
(Boolean),
Mutex
(boolean, ...
图文并茂
Mutex
性能
问题
解析
图文并茂
Mutex
性能
问题
解析(一) 原帖在这里:http://www.itpub.net/thread-1813629-1-1.html vage大师的写的一个帖子,转过来,大家分享一下
Mutex
是10G新增的锁机制,目前专用于保护共享池中的对象。...
std::
mutex
用法详解
Mutex
又称互斥量,C++ 11中与
Mutex
相关的类(包括锁类型)和函数都声明在 <
mutex
> 头文件中,所以如果你需要使用 std::
mutex
,就必须包含 <
mutex
> 头文件。 <
mutex
>...
C++ 线程使用
mutex
实现共享资源保护需注意的
问题
- std::
mutex
,最基本的
Mutex
类。 - std::recursive_
mutex
,递归
Mutex
类。 - std::time_
mutex
,定时
Mutex
类。 - std::recursive_timed_
mutex
,定时递归
Mutex
类。 Lock 类(两种) - 列表内容std::lock_...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章