ITPub博客

首页 > 应用开发 > IT综合 > 6种同步方法

6种同步方法

原创 IT综合 作者:chenjinfeng 时间:2007-08-08 13:28:07 0 删除 编辑
同步方法[@more@]

同步方法
1、互锁函数
  互锁函数运行在用户模式。它能保证当一个线程访问一个变量时,其它线程无法访问此变量,以确保变量值的唯一性。这种访问方式被称为原子访问。互锁函数及其功能见如下列表:
  函数 参数和功能 InterlockedIncrement 参数为PLONG类型。此函数使一个LONG变量增1 InterlockedDecrement 参数为PLONG类型。此函数使一个LONG变量减1 InterlockedExchangeAdd 参数1为PLONG类型,参数2为LONG类型。此函数将参数2赋给参数1指向的值 InterlockedExchange 参数1为PLONG类型,参数2为LONG类型。此函数将参数2的值赋给参数1指向的值 InterlockedExchangePointer 参数为PVOID* 类型,参数2为PVOID类型。此函数功能同上。具体参见帮助 InterlockedCompareExchange 参数1为PLONG类型,参数2为LONG类型,参数3为LONG类型。此函数将参数1指向的值与参数3比较,相同则把参数2的值赋给参数1指向的值。不相同则不变 InterlockedCompareExchangePointer 参数1为PVOID* 类型,参数2为PVOID类型,参数3为PVOID。此函数功能同上。

2.CriticalSection,event,mutex,Semaphore

6、消息队列
  Windows CE.NET允许一个应用程序或驱动程序创建自己的消息队列。消息队列既可以作为在线程之间传递数据的工具,也可以作为线程之间同步的工具。它的优点是需要很小的内存,一般只用于点到点的通信。

和消息队列相关的函数:
HANDLE WINAPI CreateMsgQueue(LPCWSTR lpszName,

LPMSGQUEUEOPTIONS lpOptions);

BOOL WINAPI CloseMsgQueue(HANDLE hMsgQ);

BOOL GetMsgQueueInfo(HANDLE hMsgQ,

LPMSGQUEUEINFO lpInfo);

HANDLE WINAPI OpenMsgQueue(HANDLE hSrcProc,

HANDLE hMsgQ,

LPMSGQUEUEOPTIONS lpOptions);

BOOL ReadMsgQueue(HANDLE hMsgQ,

LPVOID lpBuffer,

DWORD cbBufferSize,

LPDWORD lpNumberOfBytesRead,

DWORD dwTimeout,

DWORD *pdwFlags);

BOOL WINAPI WriteMsgQueue(HANDLE hMsgQ,

LPVOID lpBuffer,

DWORD cbDataSize,

DWORD dwTimeout,

DWORD dwFlags);
  使用CreateMsgQueue函数创建一个消息队列,传递一个MSGQUEUEOPTIONS结构指针。在这个结构中设置标志(允许队列缓冲区动态改变大小,允许直接读或者写操作而不管之前是否有过写操作或读操作)、队列允许的最大消息数、队列属性(只读或者只写)。使用WriteMsgQueue函数把一个消息写入到消息队列中。传递一个消息队列的缓冲区、消息数据的大小、写入缓冲区的超时值、标志。使用ReadMsgQueue函数把一个消息从消息队列中读出。使用CloseMsgQueue函数关闭消息队列缓冲区。使用OpenMsgQueue函数能够打开其它进程中创建的消息队列。另外可以用等待函数等待消息队列的变化。当消息队列由没有消息到有消息时,或由满消息到不满消息时唤醒调用等待函数的线程。关于消息队列我并没有实验过,MSDN上有几个简单的例子。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/777154/viewspace-934628/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 钩子使用指南
请登录后发表评论 登录
全部评论
  • 博文量
    25
  • 访问量
    628069