问题标签 [shared-resource]
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.
locking - 如何使用 pthread mutex 处理共享资源
我有一个关于互斥锁和 pthread 的问题。
如果有共享标志,我们称之为 (F1)。并且有多个线程。但只有一个线程 (T1) 可以提高/停止标志,所有其他线程 (T2..Tn) 只能读取或拉取状态。
当标志 F1 将被设置为新值时,如果 T1 使用 mutex_lock/mutex_unlock 就足够了吗?所有其他线程是否也应该使用 mutex_lock/mutex_unlock,即使它们只会从 F1 读取状态?
c++ - 是否有处理这种共享资源情况的设计模式或基本的面向对象原则?
假设我有三个类 , ,Solid
定义如下:Face
Edge
在此示例中,Solid
管理Edge
s 的“超集”。每个管理Face
的Solid
人都会有一个“子集” Solid.edges
。此外,任何两个Solid.faces
可能有一个共同的Edge
.
我的问题:是否有任何设计模式或一般的面向对象原则来处理这种情况?如何管理 和 之间的Solid.edges
关系Face.edges
?进一步来说
android - Android:ExoPlayer - 当 exoplayer 实例在另一个应用程序中初始化时,在一个应用程序中播放的音频流停止
有两个应用程序使用 Exoplayer。AppA 和 AppB
- AppA 开始流式传输音频。
- 然后启动 AppB,初始化 exoplayer 实例。注意:AppB 上尚未播放任何流。
- 但 AppA 立即停止播放音频。
有人可以通过 exoplayer 的新初始化来帮助理解这种行为吗?
谢谢。
ajax - 检查其他用户使用的资源的可用性
构建 Web 应用程序。
用户可以通过浏览器访问服务器上的共享资源主机,但是如果 UserA 已经在使用 Resource1,则在 UserA 释放 Resource1 或给定时间之前,Resource1 不应该对 UserB 可用。
对于这一部分:我选择使用带有元组列表(资源、当前用户)的 MySQL 表,并运行一个 cron 任务来删除过期的元组。
现在我希望能够通知 UserA UserB 想要访问 Resource1,如果 UserA 没有回答,那么 UserA 失去了对 Resource1 的锁定,然后资源对 UserB 可用。
对于这一部分,我想我必须使用 AJAX。我考虑过以下解决方案:
用户的浏览器定期进行 AJAX 调用(比如说每分钟)以证明他还活着,并且在调用时,如果另一个用户请求了相同的资源,他必须在给定的时间内挑战服务器请求(例如验证码)。如果挑战失败,则意味着用户不再在这里(可能他的浏览器一直处于打开状态或网页没有聚焦)。
棘手的部分是:“他必须在给定的时间内挑战服务器请求(例如验证码)”。怎么做?
我是否遵循最佳路径?
python - Python 闭包中的共享变量和本地化变量
Python 中的闭包以一种“奇怪”的方式表现,可以这么说。考虑以下代码片段,其中我尝试基于foo
两种方式构建闭包列表: 在bad_closure
中,闭包是“动态”构建的,而在good_closure
闭包中是由辅助函数构建的:
结果惊人地不同。似乎在 中bad_closure
,闭包每个都有一个固定值 i
,但它们都共享相同 的i
内容,每次迭代都会更新(最后取值5
)!相反, in good_closure
,i
是分开的——正如我所料。
我想看看幕后发生了什么以及为什么。
multithreading - 在 GeForce GTX 1060 上的多线程应用程序中管理共享 OpenGL 资源时崩溃
看起来像一个驱动程序错误,但我不确定)或者我做错了什么
在我的应用程序中,我使用两个不同的线程(和两个共享上下文)来上传和呈现数据。
当主线程渲染()时,应用程序有时会崩溃(可能是当工作负载高于平均水平时glMultiDrawArraysIndirect
),使用缓冲区(GL_DRAW_INDIRECT_BUFFER
我想问题出在另一个线程中)。
一些简化的伪代码:
工作线程:
主线程:
所以它有时会像这样崩溃:
(在 viewer.exe 中的 0x000001CD7121F302 处引发异常:0xC0000005:访问冲突读取位置 0x0000000000000100)
如果我使用调试模式,则没有 GL 错误。
如果出现以下情况,它不会崩溃:
1) 我使用另一个 GPU (Nvidia Geforce 980 Titan X)
或者
2)我在上传线程中更改glFlush()
为glFinish()
或者
3)我评论glMultiDrawArraysIndirect
或者
4)在渲染之前,GL_DRAW_INDIRECT_BUFFER
我插入这些代码行:
(大约需要 0.4 毫秒)。SSBO 和 VertexArrayBuffer 似乎没有问题。
配置:Windows 10 Pro,64 位 GeForce GTX 1060 驱动版本 416.81
c# - Intellisense 无法处理项目之间的共享资源文件(Visual Studio 2015)
我正在研究一个 asp.net MVC 解决方案。
我在我的解决方案中创建了一个公共资源文件夹。目标是在不同的项目中使用相同的资源文件。
为此,我遵循了这个很棒的教程:
https://www.opten.ch/blog/2015/02/17/sharing-resources-between-projects-in-a-visual-studio-solution/
它有效,我可以构建我的代码,但添加到共享项目的文件没有智能感知。此外,还有一些红色下划线的代码。(尤其是 .cshtml 文件)
我该如何解决这个问题?
c - 使用互斥锁的 getter 和 setter 最佳实践
在嵌入式编程中使用多个线程时,我感到有点不知所措,因为每个共享资源最终都带有一个受互斥锁保护的 getter/setter。
我真的很想了解以下类型的吸气剂
是有道理的,或者如果float
分配可以被认为是原子的,例如对于 ARM(不同于例如 64 位变量),这就是多余的。
我可以理解这样的事情:
值被多次处理的地方,但是在读取或返回时呢?
你能把我的想法说清楚吗?
编辑1:关于下面的第二个问题。假设我们在时间执行方面有一个“重”功能让我们称之为
其中 a,b,c 是来自共享资源的潜在值。当调用 foo 函数时,它是否应该被一个互斥锁包围,即使它只需要一个值的副本,也应该将其锁定足够长的时间?例如
这样做有什么意义吗
只锁定变量的副本而不是完全执行?
EDIT2:鉴于“a”,“b”和“c”可能存在getter和setter。这样做在性能/或其他方面是否有问题?
或者
将它们用作
我问这个是因为我无缘无故地顺序锁定和重新锁定同一个互斥锁。
python - Redis 共享资源 - 两个或多个 python 脚本更新相同的哈希但不同的键,会发生什么?
我正在设计一个数据管道,我需要在其中并行运行多个 python 脚本来更新 Redis 哈希和 ttl,它们将更新相同的哈希但不同的键。虽然每个都会更新哈希 TTL。
我会面临共享资源问题吗?
我检查了文档,我找不到 hset 函数或 expire 函数是否是原子的。
service - 共享资源管理器
我是测试自动化的顾问,最近我在几个不同的项目中遇到了类似的需求。由于我的角色,它们自然都与测试自动化有关,但我相信类似的需求也与许多其他项目相关。简而言之,需要一种可以管理来自一个资源池的不同、任意资源的可用性的服务。我想开发这样一个工具,但是看起来比较简单和有用,我想知道这样的工具是否已经存在,我的问题是这样的工具是否存在?
这里有几个例子:
- 客户想要测试她的团队开发的物理设备。她希望测试并行运行以节省时间。她只有很少的设备(例如 5 台),并且她想要一项服务来管理这些设备的可用性。测试在 PC 中单个进程的不同线程上运行,每个测试都需要与一个设备进行通信。
- 客户开发了一个 SAAS 产品并拥有一个运行自动化测试的集成环境。每个测试都需要不同的用户以避免冲突。他们有一个预定义的相关用户列表,他们需要一项服务来管理每个用户的可用性。一些测试还需要具有特定属性的用户,很少有测试需要一个以上的用户。
- 客户希望在多台机器(可以是虚拟机、容器或物理机器,并不重要)之间并行化他们的测试。还有一些测试套件可以彼此独立运行并共享相同的计算资源。
我知道第三种情况可以使用 Jenkins 或其他类似工具来解决,并且我知道管理特定资源的其他工具(例如 Selenium Grid),但我还没有找到任何通用工具来管理任何资源的访问和可用性任意共享资源。你知道这样的工具吗?
谢谢,阿农。