这是我在scala中发现的东西,它有效,我无法弄清楚为什么,任何人都可以解释为什么这有效吗?
基本上我可以使用val的引用,而我仍在定义它(因为我的其他对象/ actor将其作为参数接受)
val backbone: ActorRef = context.actorOf(
F_BackBone.props(
context.actorOf(F_PictureHandler.props(backbone)),
context.actorOf(F_UserHandler.props(backbone)),
context.actorOf(F_PageProfileHandler.props(backbone))
)
)
Run Code Online (Sandbox Code Playgroud)
如果我没有明确定义类型,我将得到编译器错误,这是有道理的.
我参加了并发编程课程的考试.这个类结构相当合理,但我觉得我不能理解"volatile"关键字以及我的想法.我已经阅读了其他有关它如何工作的帖子,这看起来很有意义,但我对Java的整体理解限制了我.这些是T/F的练习题,有人会介意回答这些问题并解释为什么它们是真还是假?我已经做了最好的猜测和解释
一个._ __ _ int变量count在多个线程之间共享,其中count上的唯一操作是读取其值并增加它.将计数标记为易失性就足够了.
false,volatile关键字确保此变量没有本地缓存,但是仍然会发生竞争条件,因为新值依赖于先前的count(并且操作因此不是原子),因此两个线程可以读取该值,增加它并且在回写时仍然存在竞争条件.如果count不依赖于先前的值(例如只是写入的ID号),这将起作用.
湾 _ ___长变量计数在多个线程之间共享,其中唯一的计数操作是读取其值并增加它.将计数标记为易失性就足够了.
与上面相同,除非该值不依赖于先前的值,否则这不是线程安全的,因为它绝不是原子操作,因为long需要两个写周期用于上部和下部32位写入和读取
C._ ___布尔变量b,最初为false,在多个线程之间共享.一个特定的线程将其值设置为true,其他线程读取该值.将b标记为易失性就足够了.
true,更改布尔值是原子的,可以在中断发生之前发生,并更新所有其他线程.
d._ ___布尔变量b在多个线程之间共享.任何线程都可以设置或读取其值.一旦b被设置为真,它从此保持为真.将b标记为易失性就足够了.
是的,原因与上述相同.
非常感谢!
我的问题是关于子项目,并与他们在bazel中的依赖关系一起工作.
我有一个我正在研究的c ++项目.称之为项目A.
项目A取决于我正在研究的另外两个人,B和C.
项目B还取决于项目C.
所以它看起来像这样.
A -> (B, C)
B -> (C)
C -> no external dependencies
Run Code Online (Sandbox Code Playgroud)
我希望能够并行处理这3个项目,但我希望让它们保持独立.
我尝试了几种设置方法:
来自我的WORKSPACE文件中git的外部依赖项.这里的问题是,当我希望对它们进行更改时,就好像它们是一个更大的项目一样,它们不会保持同步.工作流程也很不稳定,不断切换目录,推送我的存储库,回到另一个,并潜在地拉(如果bazel决定这样做,仍然不知道如何强制它).
存储库中的Git子模块和外部依赖项.这里的问题是在CLion或我用来跳转到引用的任何地方实际上从某个地方创建的bazel缓存中获取它的引用,而不是我想要提交的实际repo.
Git子模块,子模块只是我依赖的包.这将是我最喜欢的解决方案,但是如果我这样做,每个子模块中的BUILD文件(都存储在third_party或其他目录中)都是无效的,因为它们本身依赖于外部依赖性.例如,项目B在我正在使用的工作空间中包含C作为外部依赖项,但在此工作空间中C是一个包.我能想到管理这种情况的唯一方法是以这种方式重写Bazel库所包含的每个包的所有构建文件.这似乎没有效果.
我知道在谷歌我们使用不同版本的这个并且我们将它全部保存在内部工作区中,但是必须有一个解决方案让bazel这样做.