a.可能有多个用户在不同的时间申请令牌,且用户使用令牌的时间不定。
b.必须保证已被使用的令牌不被发给其他用户。
c.如果某个令牌已归还给管理系统,该令牌可以被再次使用
给你个思路作为参考.
设令牌计数器(作为全局变量),初始化为100
card_count = 100
系统中存在若干个线程(也就是题目指的用户)thread(1), thread(2) ... thread(n)
当thread(k), 其中1 <= k <= n, 被系统调度运行时,做以下操作:
1、测试card_count > 0, 若成立,转2,否则等待其>0为止
2、让thread(k)获得令牌,也就是修改card_count,使其card_count = card_count-1,由于card_count是临界资源需使用互斥访问或使用临界访问。
3、执行用户定义操作(模拟的话用个sleep就行了)
4、完成操作后,将卡片归还给系统,即card_count = card_count + 1,同样用互斥访问或临界访问。
5、结束线程thread(k)
其中第1、2步用到的API函数为CreateMutex(创建互斥量)或者InitializeCriticalSection、EnterCriticalSection、LeaveCriticalSection(分别为初始化临界区变量,进入临界区和离开临界区)
其中第4步使用API函数Sleep(ms),第5步用到ExitThread()函数
第2和4步分别对应题中的tokenGet和tokenBack,楼主可以将两个临界操作写成函数。
创建线程使用CreateThread函数,线程CallBack函数定义格式为DWORD WINAPI ThreadCallBack(LPVOID lpParameter)
以上所说的API函数在MSDN上都有参考和详细说明,请自行完成,推荐使用VC完成程序,所有API函数调用前请包含Windows.h库,只有自己动手才能学到东西。
[此贴子已经被作者于2007-8-31 9:41:27编辑过]