synchronization相关内容

跨线程同步/原子检查?

我需要创建一个方法调用程序,任何线程(例如,线程B)都可以调用该方法调用程序,该方法调用程序将在执行的主执行线程(Thead A)上的特定给定时间执行. 示例用法如下: static Invoker Invoker = new Invoker(); static void ThreadA() { new Thread(ThreadB).Start(); Thread ..
发布时间:2020-05-14 01:12:06 C#/.NET

线程之间无锁的数据可见性

我了解C ++ 11中内存排序的基本规则,尤其是发布获取排序.我有两个线程之间共享一个很大的内存,我不需要原子性,但是想确保最终一个线程所做的所有更改在另一个线程中可见,尤其是在具有轻松内存模型的平台上. 仅使用原子保护变量来触发内存同步可以吗?例如, std::atomic guardVar; char *shared_mem=get_shared_mem(); (th ..

用Java同步共享的静态对象的正确方法是什么?

这是一个有关在Java中同步共享对象的正确方法是什么的问题.一个警告是我必须共享的对象必须从静态方法访问.我的问题是,如果我在静态字段上进行同步,那么该字段所属的类的锁定是否类似于同步静态方法的方式?或者,这只会锁定字段本身吗? 在我的特定示例中,我问:调用PayloadService.getPayload()或PayloadService.setPayload()会锁定PayloadSer ..
发布时间:2020-05-14 01:00:26 Java开发

同步并通知执行顺序和作用域

1)在该线程同步代码块内调用notify时,或者一旦退出同步代码块后,线程是否会放弃其锁定? 例如,似乎没有指定线程优先级,我的Process类将自上而下执行. Produce将首先被调用,它将执行操作,然后是wait();消费将运行,然后命中notify(),它将显示"Done"或将首先延迟5秒,然后将打印"Done"? 2)另外,如果我有第三个同步方法/线程,它不等待也不通知,而只 ..
发布时间:2020-05-14 01:00:07 Java开发

在单个语句上同步?

如果我有一个只有这样一条语句的getter方法 public class NumberClass{ int number; public int getNumber() { return number; } ... } 并且有多个线程访问此方法,我是否必须同步此方法,或者因为它只有一个语句而没有必要? 解决方案 我必须同步此[ ..
发布时间:2020-05-14 00:54:58 Java开发

我是否需要内存屏障来访问由完成的线程修改的内存?

[此后,C ++术语] 我有一个线程A和线程B共享对整数值P的访问.线程A初始化该值并在运行时更新它.然后线程A完成.线程B等待线程A完成(标准OS API调用,无论使用哪种操作系统),并希望读取P. 线程B是否需要一个内存屏障来读取由线程A设置的最后一个连贯的P值?当OS API说“线程A完成"时,它修改的内存更改是否可能对其他线程不可见? 请注意,这里只有个线程在其中写入值, ..
发布时间:2020-05-14 00:51:18 C/C++开发

Java指令重新排序示例不起作用

在这里我需要一些帮助. 我正在尝试创建一个示例,该示例显示需要使用volatile来防止指令重新排序. 在此示例中,我试图显示b> a,仅当重新排序发生并且该volatile会阻止它时. 问题在于,每次跑步我都会得到b> a,我肯定会缺少一些愚蠢的东西,但是我看不到它. 我在这里想念什么? public class Example04Reorder extends Thre ..
发布时间:2020-05-14 00:50:46 Java开发

Java同步计数器-那么get()呢?

众所周知,简单的x++不是原子操作,但实际上是读-增量-写操作.这就是为什么它应该被同步.但是get()呢?我已经阅读过它也应该同步,但是有人可以解释一下为什么吗?通过引入happens-before关系来避免内存一致性错误? 如果get()经常被多个线程调用并且该值很少更改,那该怎么办呢? synchronized get()不会减慢它们的速度吗?在这种情况下,还有其他方法可以实现同步(不使用A ..
发布时间:2020-05-14 00:46:32 Java开发

同步块内的产量?调用yield()之后锁定释放?

我正在创建多个线程并在其中调用yield(). java.lang.Thread.yield()方法使当前正在执行的线程对象暂时暂停并允许其他线程执行. 是否也可能要执行其他也要进入同步块的线程? synchronized(this.lock) { //calling yield here. } 谢谢. 解决方案 据我所知,Yield()仅放弃CPU上的剩余时间片 ..
发布时间:2020-05-14 00:43:27 Java开发

android游戏循环中的同步

我正在阅读一些用于学习目的的android基本游戏技术. 我遇到了一些代码,这些代码可以同步对游戏循环线程中使用的SurfaceHolder对象的访问,为什么这是必需的? 在 sdk/samples/android-18/legacy/LunarLander 的LunarView.LunarThread类中找到的示例代码: public void run() { whil ..
发布时间:2020-05-14 00:30:45 Java开发

易失性作为同步机制

比方说,我有一个Foo类,它有一个名为Count的静态成员变量(类型为整数).在多线程应用程序中使用了该变量,在对该变量进行任何读/写操作之前,我一直在使用锁同步机制.在我阅读本文时,易碎我得到的印象是,我可以删除此变量周围的所有那些锁,而在此变量的声明中仅使用volatile关键字即可.那应该照顾所有与同步相关的东西.这样对吗?这种方法的优缺点是什么? 解决方案 我可以删除此变量周围 ..
发布时间:2020-05-14 00:30:35 C#/.NET

同步(新Object())的用例

在最近的答案中,我建议可以通过synchronizing来实现volatile的功能.包含变量的对象需要为volatile(询问者无法访问代码中的变量). 这使我想到我实际上不需要阻塞包含的对象,我只需要实现内存屏障.当synchronized实现两者同步和内存障碍时,如果我需要的只是内存障碍(在这种情况下),使用synchronized(new Object())实际上会更好达到我的记忆障 ..
发布时间:2020-05-14 00:26:20 Java开发

2插槽系统上的OpenMP

我用C ++进行了一些科学的计算,并尝试利用OpenMP对某些循环进行并行化. 到目前为止,效果很好,例如在具有8个线程的Intel i7-4770上. 设置 我们有一个小型工作站,在一个主板上包含两个Intel CPU(E5-2680v2). 只要该代码在1个CPU上运行,并具有我喜欢的多个线程,代码就可以工作.但是,一旦我使用了第二个CPU,就会不时观察到错误的结果(大约每50到1 ..
发布时间:2020-05-14 00:21:24 C/C++开发

大于比较和交换

正如标题所暗示的,我正在寻找一个比较交换方案,但具有大于比较的结果: if(newValue > oldValue) { oldValue = newValue; } 其中oldValue是某些全局共享状态,而newValue是每个线程专用的,而无需执行以下操作: synchronized(locker) { if(newValue > oldValue) { ..
发布时间:2020-05-14 00:21:01 Java开发

线程同步

我正在开发一个有3个线程的应用程序. 让我们称它们为a,b,c. 现在我必须开发类似这样的东西. 最初,b等待a完成任务,而c等待b. 一旦"a"完成其任务,便通知"b". 'b'应该醒来.现在,"a"进入等待状态. 'a'会一直等到它得到'c'的确认. 现在b完成任务并通知'c'.现在,"c"醒来,"b"进入等待状态. 现在c完成任务并确认为"a".现在,"c"要等 ..
发布时间:2020-05-14 00:20:40 Java开发