问题标签 [contention]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 动态内存分配的线程争用
我刚刚了解到,在 C 语言中,malloc
函数在多线程应用程序中使用时会出现线程争用问题。
在 C++ 中是否operator new
会遇到同样的问题?如果是,我可以使用什么技术来避免这种情况,这听起来像是对应用程序性能的巨大损失?
locking - 基于 futex 的 4 字节单写/多读锁
寻找一个最小的、基于futex的单写/多读锁实现,除了单个 4 字节 futex 状态变量之外,不需要空间开销。
一些背景知识:我有一个应用程序,它将在数千万到数亿个小对象中嵌入一个锁。由于锁定的非常细粒度的性质和应用程序的结构,我预计争用最小。此外,作家将很少见,而有竞争力的作家将更加罕见。由于所有这些原因,在这个特定的环境中,(理论上)容易出现“雷声”现象的解决方案是完全可以接受的。
visual-studio-2010 - 为什么 vs 2010 中的并发争用工具不使用托管线程 ID?
如果你使用过 vs 2010 中提供的并发争用配置文件工具,你会注意到报告中使用的所有线程 id 都不是托管线程 id,这很烦人。我想知道哪个线程是哪个线程,以及如何轻松地将报告中使用的那些线程 ID(通常是 4 位 id)与我可以从代码中获得的 ManagedThreadID 值映射?
谢谢你。
scalability - CUDA 中的动态分配 - 争用低于手写解决方案?
现在 CUDA 允许动态分配全局内存。但是,我找不到任何关于该malloc
函数可伸缩性的参考:它是否比预先分配一块内存然后通过原子地递增全局整数将下一个内存卡盘分配给线程更好?最后一个“自制”解决方案有效,但可扩展性存在明显问题,所以我想知道是否malloc
以某种方式解决了这个问题。
c# - 为什么没有锁的地方会有争用?
我在 Visual Studio 2010 中运行了一个软件的并发配置文件,发现了一些不在锁内的代码行的争用。比如说,一个创建数组的新操作,或者一个线程本地的 DynamicMethod.Invoke 调用。一些争论是关于简单的分配。我无法弄清楚为什么这些行会引起意图,因为它们不应该在我的代码中处于任何锁定状态。
有人遇到过类似的问题吗?我认为 VS2010 并发分析器中显示的争用应该都是由等待锁或进入一段互斥部分引起的。谢谢。
java - 在 Java 中,如果两个类同时调用第三个类中的方法会发生什么?
在我的项目中,我有一个由客户端类调用的游戏类。此时游戏类写入文件的路径,客户端类将从该文件中读取并清除内容。我在这里与访问发生了太多冲突,所以想使用另一个类作为存储路径数据的方法。但是,我想知道是否仍然存在问题,或者如果游戏类尝试调用存储类中的方法进行写入,而客户端类同时调用存储中的方法,结果会怎样类阅读和清除。
.net - machine.config 的奇怪之处
我正在尝试调整 IIS 以减少争用,并且在 .net 上的许多文章之后,我试图在文件中找到它,但没有结果:
.net 框架版本都不包含包含上述设置的 machine.config 文件是否正常?
java - 当大多数类并发时如何找出java中的争用问题
我们使用 yourkit profiler 找出并解决了我们应用程序中的许多争用问题。我们使用线程监控来查看哪些线程被阻塞并解决了其中的许多问题。但是 yourkit 不会将 ReentrantLocks 显示为阻塞或等待。那么如何才能真正看到争用问题。
现在不能依赖 Yourkit 监视器分析,因为我们已经使用并发结构修复了大部分位置。现在我们需要一些工具来帮助我们找出包括可重入锁在内的争用问题。
c++ - 避免来自不同线程的阻塞碰撞的简单方法?
我有一个多线程程序,其中两个单独的线程将调试输出发送到 std::clog 并且输出穿插。我想找到一种简单的方法来强制输出至少保持独立,除了输出中的换行符。这样,可以更容易地解释调试输出。在某些地方,我在输出之前插入了一个 sleep(1) 并将输出收集到一个字符串中,然后再将其发送到 clog 以减少碰撞的机会,但我更喜欢一个更强大和确定触发的解决方案。
有没有一种简单的方法可以确保每个线程在另一个线程可以进入并写入自己的输出行之前一次向 std::clog 写入一整行?