线程互锁的有关问题.大神进来
线程互锁的问题..大神进来
10个线程共用一个临界区..
有没有可能会让有一部分线程永远也没机会进入临界区???
比如说 1, 2, 3, 4, 5, 6, 7, 8, 9这几个线程轮流进入临界区.
那0线程就一直没机会进去..
有这可能么???
或者是系统会优先让没有进去过的线程进入临界区???
如果有上面说的问题出现..
那有没有什么办法解决这种问题..?
------解决方案--------------------
你想多了,windows作为抢占式操作系统,它会自动帮你的,
否则 程序员无法使用多线程。 反正 有某个线程永远没机会获得cpu时间片.
------解决方案--------------------
临界区对各个线程来说,是同等对待的,由系统调控。
如果想让某个线程永远没办法进临界区,那就让他不去尝试进入临界区得了。
比如,线程可以获得一个号码,某些号码不去尝试
unsigned CALLBACK Thread(void* e)
{
static volatile LONG x;
LONG m_x = InterlockedIncrement(&x);
if (m_x != 1)
{
// 尝试进入临界区
}
}
------解决方案--------------------
你想多了,多虑了
微软帮你解决了
10个线程共用一个临界区..
有没有可能会让有一部分线程永远也没机会进入临界区???
比如说 1, 2, 3, 4, 5, 6, 7, 8, 9这几个线程轮流进入临界区.
那0线程就一直没机会进去..
有这可能么???
或者是系统会优先让没有进去过的线程进入临界区???
如果有上面说的问题出现..
那有没有什么办法解决这种问题..?
多线程
c++
vc
临界区
死锁
------解决方案--------------------
你想多了,windows作为抢占式操作系统,它会自动帮你的,
否则 程序员无法使用多线程。 反正 有某个线程永远没机会获得cpu时间片.
------解决方案--------------------
临界区对各个线程来说,是同等对待的,由系统调控。
如果想让某个线程永远没办法进临界区,那就让他不去尝试进入临界区得了。
比如,线程可以获得一个号码,某些号码不去尝试
unsigned CALLBACK Thread(void* e)
{
static volatile LONG x;
LONG m_x = InterlockedIncrement(&x);
if (m_x != 1)
{
// 尝试进入临界区
}
}
------解决方案--------------------
你想多了,多虑了
微软帮你解决了