thread-safety相关内容
我在一段代码的几个线程中使用 boosts read_json.下面是通话的简化细分.我在一个线程(有时是另一个线程)中遇到了段错误,这让我认为 read_json 不是线程安全的(或者我只是以愚蠢的方式使用它) void someclass::dojson() {使用 boost::property_tree::ptree;ptree pt;std::stringstream ss(json_
..
我想为一些静态方法使用日历并使用静态字段: 私有静态日历 calendar = Calendar.getInstance(); 现在我读到 java.util.Calendar 不是线程安全的.我怎样才能使这个线程安全(它应该是静态)? 解决方案 如果它不是线程安全的,你就不能做一些线程安全的东西.在 Calendar 的情况下,即使从它读取数据也不是线程安全的,因为它可以更新内部数据
..
可能重复: 从多个线程调用 Console.WriteLine 只想知道如果多个线程调用Console.WriteLine,会不会导致死锁? 解决方案 安全!从 .NET API 浏览器: 控制台 I/O 流 [...] 使用这些流的 I/O 操作是同步的,这意味着多个线程可以读取或写入流.
..
在 Java 中:List.iterator() 是线程安全的,即返回的迭代器是否反映了列表在任何时候的当前状态,或者只是列表在其时的状态创作? 解决方案 List.iterator() 的行为未定义或与不同的 List 实现一致. 对于 ArrayList、LinkedList,如果在迭代列表时修改了列表,则可能会得到 ConcurrentModificationException
..
我有一个类,我在 updateLiveSockets() 方法内每 30 秒从单个后台线程填充地图 liveSocketsByDatacenter ,然后我有一个方法 getNextSocket() 将被多个读取器线程调用以获取可用的活动套接字,该套接字使用相同的映射来获取此信息. 公共类 SocketManager {私有静态最终随机随机=新随机();private final Schedul
..
我对这两个集合在多线程环境中的行为感到非常困惑. 哈希表是同步的,这意味着不会有 2 个线程同时更新它的值,对吧? 解决方案 看ConcurrentHashMaps 用于线程安全映射. 它们提供了 HashTable 的所有功能,性能非常接近 HashMap. 通过不使用地图范围的锁来获得性能,该集合默认维护一个包含 16 个锁的列表,每个锁用于锁定地图的单个存储桶.您甚
..
正如许多人所注意到并遇到的那样,HashMap.put 在并发使用时会进入无限执行循环(请参阅 GRIZZLY-1207, JGRP-525,可能是 HHH-6414,和这个 SO 回答). HashMap 被明确记录为不是线程安全的.显然,正确的解决方法是使用 Map 的线程安全实现,尤其是 ConncurrentHashMap.我对导致无限循环的并发时序更好奇.我最近在使用 Java 7
..
如果我有两个多个线程访问一个 HashMap,但保证它们永远不会同时访问同一个键,那还会导致竞争条件吗? 解决方案 在@dotsid 的回答中他这样说: 如果您以任何方式更改 HashMap,那么您的代码就会被破坏. 他是对的.如果线程使用不相交的键集,则在没有同步的情况下更新的 HashMap 将破坏 even.以下是只是一些1可能出错的地方. 如果一个线程执行 put
..
我有一个 javafx 应用程序和一个工作线程,通过 javafx.concurrent.Task 实现,它执行一个漫长的过程,即压缩和上传一组文件. 我已通过 progressProperty 将任务进度连接到进度条. 除此之外,我还希望将正在处理的项目的详细状态报告到 ui 中.也就是说,正在处理的文件的名称及其大小以及单个文件进程可能出现的任何错误. 无法从工作线程中使用这些信息更新
..
大家好, 我有一个 AsyncTask 将一些数据发布到服务器.它通过调用我从 doInBackground 编写的静态方法来实现.当我运行 AsyncTask 时,我将调用 execute() 的活动的上下文发送到我的静态方法,因为如果在与服务器交谈时出现问题,它需要它来制作 Toast.但是,在静态方法中制作 Toast 时出现此错误: 04-21 12:49:16.689:错误/Andr
..
我们使用 AsyncTasks 来访问数据库表和游标. 不幸的是,我们偶尔会看到有关数据库被锁定的异常. E/SQLiteOpenHelper(15963):无法打开 iviewnews.db 进行写入(将尝试只读):E/SQLiteOpenHelper(15963): android.database.sqlite.SQLiteException: 数据库被锁定E/SQLiteOpenH
..
Handler、Runnable 和 Threads 有什么区别? 当我使用 android 时,我需要一些东西在后台运行.我使用线程来运行它.通常我会写一个类来扩展Thread并实现run方法. 我还看到了一些实现 runnable 并将 runnable 传递给线程的示例. 但是我还是很困惑.谁能给我一个清楚的解释? 如果可以在 Thread 的 run 方法中编写后台
..
我正在将进程的输出重定向到我稍后阅读的流阅读器中.我的问题是我正在使用多个线程,这些线程应该有这个流的单独实例.当我去读入这个流时,线程混淆并开始奇怪地执行. 是否有制作线程安全流这样的东西? 编辑:我在流阅读器上的 ReadToEnd 上加锁,以及我所做的那一行: reader = proc.StandardOutput; 解决方案 框架中内置了 SynchronizedStre
..
可能的重复: C++ STL std::set 线程安全吗? STL 队列的线程安全 我猜不是,我只是想确定一下.意味着 2 个线程使用 相同 std::deque 同时使用 std::deque::push_back 或 push_front. 同样的问题适用于 std::priority_queue 和函数 std::priority_queue::push 和 std::pr
..
std::mutex 的性能与 CRITICAL_SECTION 相比如何?是一样的吗? 我需要轻量级同步对象(不需要是进程间对象)是否有任何 STL 类接近 CRITICAL_SECTION 除了 std::mutex ? 解决方案 请看我在答案末尾的更新,自 Visual Studio 2015 以来情况发生了巨大变化.原始答案如下. 我做了一个非常简单的测试,根据我的测量
..
我有一个 std::map 用于将值(字段 ID)映射到人类可读的字符串.当我的程序在启动任何其他线程之前启动时,此映射会被初始化一次,之后就再也不会被修改了.现在,我为每个线程提供了这个(相当大的)映射的自己的副本,但这显然是内存使用效率低下并且会减慢程序启动速度.所以我想给每个线程一个指向映射的指针,但这引发了一个线程安全问题. 如果我所做的只是使用以下代码读取地图: std::str
..
我还是 Javascript 的新手.我正在开发一个简单的页面,我在其中单击一个按钮以获取 servlet 上的值并显示它.它运行良好,除非我疯狂地点击按钮.有时,显示结果为空. 我想知道这是否是由同时调用以下相同函数引起的: function loadXMLDoc2(retr) {var xmlhttp;如果(window.XMLHttpRequest){//IE7+, Firefox,
..
如何定义不在不同线程之间共享的局部静态变量(在函数调用之间保持其值)? 我正在寻找 C 和 C++ 的答案 解决方案 在 Windows 上使用 Windows API:TlsAlloc()/TlsSetValue()/TlsGetValue() 在 Windows 上使用编译器内在:使用 _declspec(thread) 在 Linux(其他 POSIX???)上:g
..
这是我实现的模型: public class LoginSession {private static final Gson gson = new Gson();私人字符串ID;私人字符串名称;私人长时间戳;公共登录会话(字符串 ID,字符串名称){this.id = id;this.name = 名称;this.timestamp = System.currentTimeMillis();}公
..
我想知道C#是否自动实现了属性,比如public static T Prop { get;放;},线程安全与否.谢谢! 解决方案 看来不是.这是使用 Reflector 的反编译: 私有静态字符串测试{[编译器生成]得到{返回 k__BackingField;}[编译器生成]放{k__BackingField = value;}}
..