English 中文(简体)
C++中的条件变量有哪些共同用途?
原标题:What are common uses of condition variables in C++?

我试图了解情况变量。 我想知道使用条件变量的常见情况是什么。

其中一个实例是阻挡点,即两条路口进入点,即生产者将某一项物品推入点,而消费者则从点燃一个物品。 如果 que点空,消费者的read子正在等待,直到生产线上发送信号。

还需要使用条件变数的其他设计情况是什么?

我更喜欢以经验为根据的例子,例如实际应用的经验。

最佳回答

一种使用条件变量比仅仅使用电文更复杂,即“共用一个锁”,因为不同校对正在等待同样基本性质的明显不同条件。 例如,你有一个(非常高的、简化的)网络藏匿点。 藏匿处的每一条都有三个可能的国家:没有。

getURL:
    lock the cache
    three cases for the key:
        not present:
            add it (IN_PROGRESS)
            release the lock
            fetch the URL
            take the lock
            update to COMPLETE and store the data
            broadcast the condition variable
            goto COMPLETE
        COMPLETE:
            release the lock and return the data
        IN_PROGRESS:
            while (still IN_PROGRESS):
                wait on the condition variable
            goto COMPLETE

在实践中,我使用了该模式,在没有附表人的任何帮助的情况下,实施PPOSIX功能的变式pthread_once。 由于我无法使用每条<控制的ema光或锁,而且仅仅在24小时开始使用,这就是说该功能被允许失败,而<条码>。 仅有三维先入。 为此,pthread_once 其本身没有界定的错误代码,因此执行该守则可能失败 t 给你的打电话者以任何良好选择......

当然,根据这种模式,你必须谨慎地缩小规模。 每当任何初步化工作完成时,每一次等待的read子都赶上lock锁。 因此,当你设计这个制度时,你非常仔细地思考了艰苦条件,然后决定,在你看到经证实的绩效问题之前,你可以做任何实际执行。

问题回答

举例来说,除了你已经提到的消费者-生产者模式外,在

我知道这并非非常有用,但我用的是条件变数,而无论何时,我都想等待事情发生,或只是等到事情发生。

在我使用条件变数的情况下,一种非常常见的情况是,每几分钟都听起来做某些处理,然后又回到睡觉。 在关闭主线时,显示背景已接近尾声,然后加入。 当时的背景已经 wait了,等待时间,才能睡觉。

背景情况遵循这一基本逻辑

void threadFunction() {
    initialisation();

    while(! shutdown()) {
        backgroundTask();

        shutdown_condition_wait(timeout_value);
    }

    cleanup();
}

这使背景迅速和令人宽慰地关闭。

如果我有一些这样的线索,那么每台主要功能信号就会关闭,然后在下一次之后加入。 这使得每个翻新部分能够同时关闭。

我使用条件变量,而不是错误易发的Win32事件物体。 随同,你不必对虚假信号感到担忧。 更容易等待多起事件的发生。

var也能够取代ema磷,因为它们更是通用的。

I used it to send synchronized messages, where a sync-object was added.
The sync object consisted of a condition variable with a "ready" boolean.
In the syncMsg::send() function, there was a sync->wait() and in the syncMsg::handle() function, there was a sync->go().

由于可能出现僵局,应当明智地加以利用。





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签