当前位置: 代码迷 >> C语言 >> 问一下 这题什么意思,如何做
  详细解决方案

问一下 这题什么意思,如何做

热度:135   发布时间:2007-08-30 17:37:52.0
问一下 这题什么意思,如何做
一个特权访问系统,要访问该系统需要向管理系统申请一个令牌,系统提供的令牌有限,所以用户使用完令牌后要把令牌归还。假设管理系统提供100张令牌,编号从1到100。请设计这个令牌管理系统的申请函数tokenGet和归还函数tokenBack。注意:
a.可能有多个用户在不同的时间申请令牌,且用户使用令牌的时间不定。
b.必须保证已被使用的令牌不被发给其他用户。
c.如果某个令牌已归还给管理系统,该令牌可以被再次使用
搜索更多相关的解决方案: 管理系统  用户  特权  如何  

----------------解决方案--------------------------------------------------------
线程同步问题



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

请大家不要用TC来学习C语言
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
----------------解决方案--------------------------------------------------------

能说的详细点吗?
没听明白什么意思。


----------------解决方案--------------------------------------------------------
要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编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案