Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 线程争用与竞争_Multithreading_Parallel Processing_Thread Safety_Race Condition - Fatal编程技术网

Multithreading 线程争用与竞争

Multithreading 线程争用与竞争,multithreading,parallel-processing,thread-safety,race-condition,Multithreading,Parallel Processing,Thread Safety,Race Condition,我已经看到,当涉及到线程的stateat临界部分时,争用和竞争这两个术语可以互换使用。它们相同吗?争用通常指两个或多个线程需要锁定同一个锁的情况。如果任何线程在试图获取锁时有很大的可能被迫等待,那么我们说锁是有争议的,或者可能是有严重争议的 Race、Race condition和datarace是一些词组,它们的含义随着时间的推移而改变,对于使用不同编程语言的人来说,它们可能有不同的含义。任何时候有人使用这些单词/短语中的一个,确保你理解他们是如何使用的 Race以最一般的方式描述了某些操作的

我已经看到,当涉及到线程的stateat临界部分时,争用和竞争这两个术语可以互换使用。它们相同吗?

争用通常指两个或多个线程需要锁定同一个锁的情况。如果任何线程在试图获取锁时有很大的可能被迫等待,那么我们说锁是有争议的,或者可能是有严重争议的

Race、Race condition和datarace是一些词组,它们的含义随着时间的推移而改变,对于使用不同编程语言的人来说,它们可能有不同的含义。任何时候有人使用这些单词/短语中的一个,确保你理解他们是如何使用的

Race以最一般的方式描述了某些操作的结果取决于线程调度方式的情况。如果每一个可能的结果都是可以接受的,那么一场竞赛可能是良性的。例如,如果两个或多个线程竞相获取一个锁,并且某些内容写入文件的顺序取决于哪个线程首先到达,但是没有人关心顺序

*但是*

…竞争条件和数据竞争现在被一些程序员用来描述由现代优化编译器编译并在现代多处理器硬件上运行的多线程代码在没有某种保护的情况下访问共享变量时可能出现的许多微妙问题*

即使线程竞相访问一些未受保护的共享变量并不明显,它仍然可能是坏的,并且以十年或更长时间前不存在的方式坏。**我不能全部说出它们的名字

<>如果你编写C++程序,C++语言标准只需简单地说,对任何共享变量的访问都不受保护是一个数据竞争,任何数据竞争都是未定义的行为,如果程序调用了未定义的行为,那么它是错误的!不管它是否适合你,它是错误的,它是错误的,这是你的错,如果你将它发送给客户,六个月后客户起诉你,因为他们升级了他们的操作系统,他们的整个电子商务系统去了****,那么这都是你的错,因为。。。数据竞赛

*我说的是互斥锁和/或原子数据类型

**注意旧教科书中的建议和示例。

交叉张贴:。请