-
通常有两种方法可以解决这个问题(个人认为)。
二:使用; 以下是如何使用它:
假设您创建了一个 **,如下所示:list> data=new arraylist>()。
所以要解决这个线程安全问题,可以这样使用,比如:
list> data= arraylist>()
此外,还有 ArrayList 和 LinkedList; ArrayList 适合在大量随机访问的情况下使用,而 LinkedList 适合在表中插入和删除,两者都是非线程安全的,解决方案与上面相同(为了避免线程安全,上述方法,尤其是第二种方法,其实非常耗费性能)。
-
1.螺纹安全:
这意味着多个线程在执行同一段时使用锁定机制,因此每次执行的结果与单个线程的结果相同,并且在执行程序时不会出现意外结果。
2.螺纹不安全:
这意味着没有提供锁定机制,并且可能会有多个线程连续更改数据,从而导致数据脏。
例如,如果票务系统有 1000 张票,而 A 和 B 同时购买票证,如果线程不安全,那么票务系统可能同时执行 1000-1,最终结果是 A 和 B 留下了 999 张票而不是 998 票。
-
1.螺纹安全是:
如果您处于多个线程同时运行的进程中,并且这些线程可能会:
特别委员会将同时运行这个**属。 如果每次运行的结果与单线程运行的结果相同,并且其他变量的值与预期相同,则它是线程安全的。
2.螺纹不安全:
也就是说,没有提供数据访问保护,可能会有多个线程连续更改数据,导致数据脏污。
当多个线程同时访问同一个对象时,会出现数据错误、不完整等情况,即线程不安全,而当不发生延续错误时,则为线程安全,一般采用锁定机制。
-
我记得 STL 中的东西基本上是线程不安全的,你需要使用互斥锁这样的线程同步机制来确保你想使用的对象是线程安全的。
不知道怎么计算细节,欢迎提问。
-
stl 的所有容器都是读安全和写安全的;
-
矢量线程安全 ArrayList 不是线程安全的,但会分解系统性能。
例如,在添加元素时,arraylist 类可能需要完成两个步骤:
1.将此元素存储在 items[size] 位置;
2.增加大小的值。
在单线程操作的情况下,如果 size = 0,则当添加元素时,它位于位置 0 且 size=1;
在多线程的情况下,例如使用两个线程,线程 A 首先将元素存储在位置 0。 但此时,CPU 会调度线程 A 暂停,线程 B 有机会运行。 线程 B 也会向这个数组列表添加元素,因为 size 仍然等于 0(注意,我们假设添加元素是一个两步过程,线程 A 只完成第 1 步),所以线程 B 也将元素存储在位置 0。
然后线程 A 和 B 都继续运行,都增加了大小值。
好了,现在让我们看一下 ArrayList 的情况,其中实际上只有一个元素,位于位置 0,大小等于 2。 这是“线程不安全”。
-
这种说法是错误的。 C++ STL 容器不是线程安全的。
除非您谈论的是其他库的向量实现。 螺纹安全示例:
线程正在插入。
正在删除线程。
如果它是线程安全的,则上述操作是可以的。 如果它不是线程安全的,则向量中的值可能会被弄乱。 导致向量行为不确定。
-
队列本身不是线程安全的,有两种方法可以使它们保持线程安全:
1.手动锁定。
queue mycollection = new queue();
lock(2.调用同步方法,你会得到一个线程安全队列
queue mysyncdq = myq );
-
线程安全。 如果同时使用多个线程,并且结果正确,则称为线程安全。
例如,当我们打开知道的主页时,全世界很多人都在打开它,而且是正确的,这证明了知道主页的段落是线程安全的。
-
简单地说。 如果你有一个方法,其中多个线程同时访问它,如果结果与单线程访问的预期相同,则说它是线程安全的,如果结果不相同,则说线程不安全。
希望对你有所帮助。