考虑下面的代码狙击:
package sync;
public class LockQuestion {
private String mutable;
public synchronized void setMutable(String mutable) {
this.mutable = mutable;
}
public String getMutable() {
return mutable;
}
}
Run Code Online (Sandbox Code Playgroud)
在Time1线程Thread1将更新'mutable'变量.在setter中需要同步,以便将内存从本地缓存刷新到主内存.在时间Time2(Time2> Time1,没有线程争用)线程Thread2将读取mutable的值.
问题是 - 我需要在getter之前进行同步吗?看起来这不会导致任何问题 - 内存应该是最新的,Thread2的本地缓存内存应该由Thread1无效和更新,但我不确定.
java concurrency multithreading locking concurrent-programming
我正在阅读Java Concurrecny这本书.在第85页的第5.2.1节中,它讨论了ConcurrentHashMap及其优点.然而,在一个部分中,书籍声称
ConcurrentHashMap返回的迭代器非常一致.这意味着这个迭代器可以容忍并发修改,遍历构造迭代器时存在的元素,并且可以(但不保证)反映迭代器构造后对集合的修改.
从我理解为什么并发程序中的整个同步点是允许线程以一致的方式访问共享资源,而ConcurrentHashMap并没有真正实现这一点.那么为什么要使用呢?
我很好奇在分布式和并发环境中生成唯一序列号的约束和权衡.
想象一下:我有一个系统,它所做的就是每次提出时都会返回一个唯一的序列号.这是这种系统的理想规范(约束):
显然,这是一个理想化的规范,并非所有约束都可以完全满足.参见CAP定理.但是,我很想听听您对各种限制因素的分析.我们将留下什么类型的问题以及我们将使用什么算法来解决剩余的问题.例如,如果我们摆脱了计数器约束,那么问题就变得容易了:因为允许间隙,我们可以对数值范围进行分区并将它们映射到不同的机器上.
欢迎任何参考(论文,书籍,代码).我还想保留一份现有软件清单(开源与否).
软件:
counter guid distributed-computing sequence concurrent-programming
我一直在查看Topshelf代码,并注意到它正在使用名为'stact.dll'的程序集.关于此,似乎没有很多信息.它似乎是一个使用actor和'channels'构建并发应用程序的库.我发现Topshelf代码有点难以理解,但我有兴趣了解更多有关这种编程风格的信息.有没有人有这个图书馆的经验?你是怎么学习如何使用它的?
我从未在并发编程上做过什么.我对它们的了解仅来自OS书籍.
我今天在接受采访时遇到了这个问题.我想知道是否有人可以给我一个直观的
多线程和多进程的解释以及何时选择它们.或者,也许你可以
推荐我一些书籍或实际例子的链接.我想阅读的源代码
开源项目(c/c ++)与conccurent编程,希望你能推荐一个.
非常感谢您的帮助.
最近,我从" 多处理器编程的艺术 "第8章中读到了一些关于" 监视器和阻塞同步 "的例子,这些例子使用了signalAll()一个Condition对象,而没有获得与之相关的锁Condition.
令人惊讶的是,我没有在本书的勘误表中找到任何修复这些例子的方法.此外,他们建议对a的图8.12的例子进行修正FifoReadWriteLock,但他们继续使用signalAll()没有锁定的情况.这扰乱了我,我试图找到关于这些示例的其他注意事项,以了解这些Java示例以这种方式编写的原因.
例如,问题的答案 " 读写互斥锁如何工作?"显示了a的实现的相同示例FifoReadWriteLock,它实现了writeUnlock():
void writeUnlock() {
writer = false;
condition.signalAll();
}
Run Code Online (Sandbox Code Playgroud)
关于没有锁定获取,您可以阅读两个不同的原因:
由于本书使用了Java中的示例并明确说明了以下内容,因此很难接受第一个参数:
本书使用Java编程语言.
关于第二点,我知道方法的java.util.concurrent.locks.Condition状态中的Java API signal():
当调用此方法时,实现可能(并且通常确实)要求当前线程保持与此关联的锁
Condition.
如果仅" 实施可能 ",则意味着它不是强制性的.然而,据我所知,我发现任何不符合此要求的实施方案.所以我想知道哪些Java Condition实现不需要当前线程来保存锁?
parallel-processing multithreading locking java.util.concurrent concurrent-programming
是否可以对boost :: asio中的条件变量执行异步等待(读取:非阻塞)?如果没有直接支持,任何有关实施它的提示将不胜感激.
我可以实现一个计时器,甚至每隔几毫秒启动一次唤醒,但这种方法非常低劣,我发现很难相信条件变量同步没有实现/记录.
我试图检查Go将如何使用100,000 goroutines.我写了一个简单的程序来产生许多例程,除了打印一些公告之外什么都不做.我将MaxStack大小限制为仅512字节.但我注意到程序大小并没有减少.它消耗了大约460 MB的内存,因此每个goroutine大约4 KB.我的问题是,我们可以设置最大堆栈大小低于goroutines的"最小"堆栈大小(可能是4 KB).我们如何设置Goroutine开始的最小堆栈大小?以下是我用于测试的示例代码:
package main
import "fmt"
import "time"
import "runtime/debug"
func main() {
fmt.Printf("%v\n", debug.SetMaxStack(512))
var i int
for i = 0; i < 100000; i++ {
go func(x int) {
for {
time.Sleep(10 * time.Millisecond)
//fmt.Printf("I am %v\n", x)
}
}(i)
}
fmt.Println("Done")
time.Sleep(999999999999)
}
Run Code Online (Sandbox Code Playgroud) React PHP如何处理异步非阻塞I/O?
Nodejs使用其事件队列来处理不同线程上的I/O. 它使用libuv.就像在PHP中一样,React如何处理单个线程上的非阻塞I/O进程?
我今天参加了面试,面试官问我以下问题:
重新入侵和互斥是线程安全的吗?你能解释一下原因吗?
我对并发编程比较陌生,无法回答它..但我说......
相互排斥是线程安全的.但重新入门不是,这就是为什么我们有可重入锁定的原因.
面试官转到下一个问题但是到了另一个地方......我想我搞砸了这个......
当他问我这个时,他期待我说什么?
concurrency ×2
java ×2
locking ×2
asynchronous ×1
boost-asio ×1
boost-thread ×1
c++ ×1
counter ×1
go ×1
guid ×1
php ×1
pthreads ×1
reactphp ×1
sequence ×1
topshelf ×1