在我的程序中我有两种方法:publicvoidmethodA(){//getscalledveryoften//writesomethingtofile}publicvoidmethodB(){//writesomethingtofile}methodA经常被客户端调用,而methodB只是偶尔被调用。但是,我需要确保每当客户端想要调用methodB时,它都可以调用(在methodA当前可能执行完成之后)。我试图在每个方法中引入一个带有锁定对象的同步块(synchronizedblock),但是methodB似乎不够用,因为methodA被更频繁地调用。我该如何解决这个问题?
所以当一个任务吃完它的时间片后,它会被重新插入到红黑树中。如果任务之前已经休眠了很长时间,导致vruntime与运行队列中的其他任务相比非常小,那么它会作为红黑树中最左边的节点重复插入,对吧?因此它总是会被选为下一个要运行的任务?我已经检查了core.c和fair.c中的源代码,我没有看到这个任务应该屈服于其他任务的任何地方。尽管在函数pick_next_entity()中,我确实看到了一些任务,例如cfs_rq->next、cfs_rq->last等。它们可能具有更高的运行优先级,但我认为这不是阻止非常小的任务的正确位置vruntime占用处理器时间过长,对吗?有人有线索吗?谢谢,
我在linux中使用flock(2)来控制对homespun数据库中资源的访问,同时使用共享和独占锁定模式。我发现如果授予了共享锁,那么另一个进程也可以获得共享锁,而不管是否有阻塞的进程在等待独占锁。这意味着对于具有许多重叠读者的流行资源,独占锁请求可能会饿死很长时间,也许永远饿死。此行为与flock(2)手册页并不矛盾,但令我感到惊讶的是,此代码已在FreeBSD和OS-X中运行多年而没有出现问题。我的猜测是BSD系统必须实现某种队列来防止独占锁永远饿死。我的主要问题是,是否有任何简单的技巧或编程模式可以防止我的独占锁耗尽?第二个问题,为了满足我的好奇心,有人知道这在BSD系统上是否