gpt4 book ai didi

c++ - 如果线程涉及互斥锁定和解锁之间的循环,则在 C++ 中的 2 个线程之间切换执行

转载 作者:行者123 更新时间:2023-11-30 01:07:05 25 4
gpt4 key购买 nike

我有一个字符串 vector ,它是一个共享资源。

std::vector<std::string> vecstr;

有 2 个并行运行的线程:

线程 1:将字符串插入共享资源。

Thread2:计算共享资源的大小。

std::mutex mt;

void f1()
{
mt.lock();
while(some_condition())
{
std::string str = getStringFromSomewhere();
vecstr.push_back(str);

}

mt.unlock();
}

size_t f2()
{
mt.lock();
while(string_sending_hasEnded())
{
size_t size = vecstr.size();
}
mt.unlock();
}

int main()
{
std::thread t1(f1);
std::thread t2(f2);
t1.join();
t2.join();

}

我的问题是:如果 t1 线程在整个 while 循环持续时间内保持 vecstr 共享资源互斥锁锁定,t2 将如何获取共享资源 vec​​str 来计算它的大小?执行是否在 2 个线程之间保持切换,或者取决于谁获得第一个互斥锁。因此,如果 T1 获得了互斥锁,那么它只会在 while 循环结束后才释放它?这是真的 ?或者执行在 2 个线程之间不断切换。

If any one of the thread is going to hijack the execution by not allowing other thread to be switched in between then how do i handle such a scenario with while/for loops in each thread but both threads needs to be continuously executed ? Where I want both the threads to keep switching their execution. Shall I lock and unlock inside the while loop, so that each iteration has mutex locked & unlocked ?

最佳答案

你明白了。如果你想在现实生活中成功地使用互斥锁,你将只让互斥锁查找尽可能少的时间。例如,就在 push_back() 和 size() 调用周围。

但实际上,您首先需要做的是弄清楚您的程序应该做什么,然后使用互斥锁来确保实现该目标。目前我知道你想要运行一些线程,但这不是你想要实现的。

关于c++ - 如果线程涉及互斥锁定和解锁之间的循环,则在 C++ 中的 2 个线程之间切换执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45129233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com