windows下怎么获取信号量当前值 100
如题就像linux下的sem_getvalue函数。在不改变信号量的值的情况下,多线程中windows下用什么函数在线程函数里面获取一个信号量当前值?...
如题
就像linux下的sem_getvalue函数。
在不改变信号量的值的情况下,多线程中windows下用什么函数在线程函数里面获取一个信号量当前值? 展开
就像linux下的sem_getvalue函数。
在不改变信号量的值的情况下,多线程中windows下用什么函数在线程函数里面获取一个信号量当前值? 展开
4个回答
展开全部
在windows中获取信号量当前值的方法:
1、分别创建进程A和B
2、进程A 创建一个叫 test 的信号量 mutex1 = CreateSemaphore(..."test"...);
3、进程B 打开该 test 信号量 mutex2 = OpenSemaphore(..."test"...);( 1 ) CreateSemaphore()
HANDLE WINAPI CreateSemaphore(
_In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes,
_In_ LONG lInitialCount,
_In_ LONG lMaximumCount,
_In_opt_ LPCTSTR lpName
);
lpEventAttributes :事件对象的安全属性,一般置为NULL ;
lInitialCount :表示一开始可以使用的资源数目,即当前资源计数;
lMaximumCount :信号量对象可以处理的最大资源数量;
lpName :创建有名的信号量对象,用于进程间的共享;
如果该信号量对象已经存在,那么 Create Semaphore会返回该内核对象的句柄,并通过系统返回错误 ERROR_ALREADY_EXISTS ,通过 GetLastError ()获得。
因为系统会维护内核对象的一个使用计数,每被引用一次,计数递增1,调用 CloseHandle()函数“关闭”对象,会从进程的句柄表中删除该对象的句柄索引,对象的使用计数递减1,如果计数未递减至0,该对象不会被销毁,只有计数递减至0,说明对该对象的所有引用都已关闭,系统才会销毁该对象。然后系统底层会维护这个内核对象,当所有进程都没有引用这个内核对象的时候会释放掉。最后的出来的当量信号值为信号量。
1、分别创建进程A和B
2、进程A 创建一个叫 test 的信号量 mutex1 = CreateSemaphore(..."test"...);
3、进程B 打开该 test 信号量 mutex2 = OpenSemaphore(..."test"...);( 1 ) CreateSemaphore()
HANDLE WINAPI CreateSemaphore(
_In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes,
_In_ LONG lInitialCount,
_In_ LONG lMaximumCount,
_In_opt_ LPCTSTR lpName
);
lpEventAttributes :事件对象的安全属性,一般置为NULL ;
lInitialCount :表示一开始可以使用的资源数目,即当前资源计数;
lMaximumCount :信号量对象可以处理的最大资源数量;
lpName :创建有名的信号量对象,用于进程间的共享;
如果该信号量对象已经存在,那么 Create Semaphore会返回该内核对象的句柄,并通过系统返回错误 ERROR_ALREADY_EXISTS ,通过 GetLastError ()获得。
因为系统会维护内核对象的一个使用计数,每被引用一次,计数递增1,调用 CloseHandle()函数“关闭”对象,会从进程的句柄表中删除该对象的句柄索引,对象的使用计数递减1,如果计数未递减至0,该对象不会被销毁,只有计数递减至0,说明对该对象的所有引用都已关闭,系统才会销毁该对象。然后系统底层会维护这个内核对象,当所有进程都没有引用这个内核对象的时候会释放掉。最后的出来的当量信号值为信号量。
展开全部
当前值是什么意思,要是指等待信号量的话
WaitForSingleObject
WaitForMultipleObjects
都行
WaitForSingleObject
WaitForMultipleObjects
都行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要是指等待信号量的话
WaitForSingleObject
WaitForMultipleObjects
都行
信号和标记里有计数
WaitForSingleObject
WaitForMultipleObjects
都行
信号和标记里有计数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
共享内存可以被多个进程操作,这是我们的目的,也可以被多个进程同时操作,这是我们不希望看到的,为了避免这种情况,我们使用共享内存时需要配合信号量同时使用。
共享内存的使用,主要有以下几个api:
shmget()、shmat()、shmdt()及shmctl()。
共享内存的使用,主要有以下几个api:
shmget()、shmat()、shmdt()及shmctl()。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询