C 线程-访问资源避免饥饿
我知道这不是一个“家庭作业帮助网站”,但我在过去的几天里疯了,因为我必须实现对资源的访问以避免饥饿,我不知道如何做到这一点。有人能帮我提供一些应用程序示例或文档吗?分配为:一个资源可由两种类型的进程使用:黑色和白色。当资源被白色进程使用时,它不能被黑色进程使用,反之亦然。实现对资源的访问,避免饥饿。这是生产者-消费者的情况吗?一般来说,访问共享资源(或互斥)是一个问题 如果有两个同一类的对象,则两个线程: 伪代码:C 线程-访问资源避免饥饿,c,linux,multithreading,C,Linux,Multithreading,我知道这不是一个“家庭作业帮助网站”,但我在过去的几天里疯了,因为我必须实现对资源的访问以避免饥饿,我不知道如何做到这一点。有人能帮我提供一些应用程序示例或文档吗?分配为:一个资源可由两种类型的进程使用:黑色和白色。当资源被白色进程使用时,它不能被黑色进程使用,反之亦然。实现对资源的访问,避免饥饿。这是生产者-消费者的情况吗?一般来说,访问共享资源(或互斥)是一个问题 如果有两个同一类的对象,则两个线程: 伪代码: loop if shared_resource is free
loop
if shared_resource is free
lock shared_resource
do something
free shared_resource
这是一个非常宽泛的概念 让我们做一些假设(为了讨论):
- 我们的进程将是线程——而不是实际的软件进程,在您的任务中可能有一个重要的区别
- 白色进程是读卡器
- 黑人是作家
- 我们的共同资源是特定的变量
- 第一步:Readers/Writers Locks是当第一个(读)线程获取变量上的“读锁”时发生的事件,第二个(写)线程尝试获取“写锁”,但被阻止,直到所有读卡器完成读取
- 第二步:在第一个线程完成读取之前,第三个(读取)线程抓取变量上的“读取锁”;这意味着第二个(写)线程必须等待第三个线程完成
Seqlock算法的一种变体可能是您的解决方案。您了解饥饿的症状是什么吗?只要您让我们知道这是家庭作业,并接受这样一个事实,即我们将尝试不直接向您提供解决方案,而是引导您走上正确的道路,帮助您了解基本知识,那么“家庭作业帮助网站”也是如此(或者是目前正在逃避你的事情)并让你为之工作。就read而言,饥饿是一个或多个线程无法进展的情况。死锁同样存在问题。