创建线程函数CreateThread

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

释放互斥量函数 ReleaseMutex
功能:释放互斥对象的控制权。 格式: BOOL WIANPI ReleaseMutex(HANDLE hMutex); 参数说明: hMutex—互斥对象句柄。 返回值:TRUE表示成功,FALSE表示失败。
注:相当于我们的V操作
创建信号量函数 CreateSemaphore
功能:创建一个新的信号量。
格式:
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
LONG
lInitialCount,
wk.baidu.com
LONG
lMaximumCount,
LPCTSTR lpName);
参数说明:
lpSemaphoreAttributes——用于定义信号量的安全特性。
消费者C:
Wait(full); Wait(mutex);
in:=(in+1) mod n;
netxc=buffer(out);
Signal(mutex); Signal(full);
out:=(out+1) mod n; Signal(mutex); Signal(empty);
读者-写者问题(读者优先) 读者R:
ExitThread 退出线程函数
功能:该函数结束一个线程 格式:VOID ExitThread (DWORD dwExitCode); 参数说明: dwExitCode—调用线程的退出代码
CreateMutex 创建互斥量函数
功能:函数创建有名或者无名的互斥对象。如果函数调用成功,返回值 是互斥对象句柄;如果函数调用之前,有名互斥对象已存在,那么函数 给已存在的对象返回一个句柄。 格式: HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName); 参数说明: lpMutexAttributes—取值NULL。 bInitialOwner—指示当前线程是否马上拥有该互斥量(即马上加锁)。 lpName—互斥量名称。
写者W:
Wait(wmutex); Write_Action(); Signal(wmutex);
rcount--;
if(rcount == 0)
Signal(wmutex);
Signal(rmutex);
哲学家进餐问题 哲学家i(i=0,1..5) array of fork[]:semaphore
lInitialCount——设置信号量的初始计数。
内容
❖ 一、信号量机制解决互斥与同步问题
实验:P/V信号量的编程实现
❖ 二、管程机制解决互斥与同步问题
实验:管程机制的编程实现
一、信号量机制解决互斥与同步问题
信号量(semaph信ore号)机量制机制
解决并发进程同步的工具
P操作表示同步进程发出的检测信号量操作,检测 是否能够使用临界资源
V操作表示访问完临界资源的进程通知等待进程已 经完成了临界资源的访问,将临界资源释放。
有的线程结束。
创建线程函数 CreateThread
功能:该函数创建一个在调用进程的地址空间中执行的线程。 若函数调用成功,返回值为新线程的句柄;若函数调用失败, 返回值为NULL。 格式: HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlag, LPDWORD lpThreadId); 参数说明: lpThreadAttributes—指向一个LPSECURITY_ATTRIBUTES(新线程的安全性描述符 dwStackSize—定义原始堆栈大小。 lpStartAddress—指向使用LPTHRAED_START_ROUTINE类型定义的函数。 lpParamiter—定义一个给进程传递参数的指针。 dwCreationFlags—定义控制线程创建的附加标志。 lpThread—保存线程标志符(32位)
实验方案设计
以读者-写者(读者优先)为例:
1.创建若干线程分别模拟读者操作和写者操作
2.读线程间和写线程间对各自局部共享资源的访问修改采用
Mutex对象,结合WaitForSingleObject 保证互斥操作。
3.读线程与写线程争用全局临界资源采用临界区(Critical
Seciton)。 4.统管读写线程的线程采用WaitForMultipleObjects 保证等待所
经典互斥与同步问题回顾
生产者-消费者问题
读者-写者问题
哲学家进餐问题
生产者-消费者问题 生产者P:
mutex,full,empty:semaphore mutex :=1;
full:=0;
Wait(empty);
empty:=n;
Wait(mutex); Buffer(in)=nextp;
rmutex,wmutex:semaphore rmutex :=1;wmutex :=1;
Wait(rmutex);
rcount:int
rcount++;
rcount:=0;
if(rcount == 1) Wait(wmutex); Signal(rmutex); Read_Action(); Wait(rmutex);
fork[] :={1,1,1,1,1};
thinking();
Wait(fork[i]);
Wait(fork[(i+1) mod 5]) eating();
思考,怎么解决 死锁问题 ?
Signal(fork[i]);
Signal(fork[(i+1) mod 5])
同步对象
同步对象是指Windows/Linux中用于实现同步与互斥的实体, 包括互斥量(Mutex)、信号量(Semaphore)、临界区(Critical Section)和事件(Events)等。 本实验中使用到信号量、互斥量和临界区三个同步对象。
相关文档
最新文档