synchronization相关内容

C ++从多个线程访问向量

在我的程序中,一些线程正在运行.每个线程都获得一个指向某个对象的指针(在我的程序中为vector).然后每个线程都会修改向量. 有时我的程序会因段错误而失败.我以为是因为线程A开始对向量做一些操作而线程B还没有完成对它的操作?会不会是真的? 我应该如何解决?线程同步?还是制作一个标志VectorIsInUse并在操作它时将该标志设置为true? 与所有STL容器一样, 解决方案 ..

如何通过使用Monitor/Mutex/Semaphore同步TPL任务?还是应该完全使用其他东西?

我试图将我的一些旧项目从ThreadPool和独立的Thread迁移到TPL Task,因为它支持一些非常方便的功能,例如Task.ContinueWith的延续(以及C#5的async\await),更好的取消,异常捕获等.我很想在我的项目中使用它们.但是,我已经看到了潜在的问题,主要是与同步有关. 我使用经典的独立Thread编写了一些显示生产者/消费者问题的代码: class T ..
发布时间:2020-05-13 23:18:58 C#/.NET

等待回调完成的最佳方法

在下面的代码中,main()函数正在调用request()函数,该函数在内部调用mm_th_done_cb()的th_request_async()函数. 只有在执行mm_th_done_cb()之后,才是最好的,最有效的进行main操作的方法. 虚拟代码 int mm_th_done_cb(int error_code, th_result_s* th_result, void ..
发布时间:2020-05-13 23:11:29 C/C++开发

同步方法在单线程应用程序中会变慢吗?

在过去的几分钟中,我一直在对自己进行辩论,并且我看到是与否的原因.这源于查看 Java HashMap与Hashtable 的答案,并看到一些人说Hashtable是实际上更慢. 在我看来,如果在单个线程中运行,则同步方法应该与未同步的方法绝对没有区别,因为同步操作不应阻止任何操作.也就是说,我可以想象编译器对这两种情况的处理方式不同,这就是为什么人们说同步速度较慢. 并不是说它是结论 ..
发布时间:2020-05-13 23:10:51 Java开发

在Python中创建一个简单的聊天应用程序(套接字)

我正在尝试使用套接字(python)创建一个简单的聊天应用程序.客户端可以向服务器发送消息的地方,服务器只需将消息广播给其他所有客户端(发送者除外)即可. 客户端有两个线程,它们永远都在运行 send:发送只是将约束信息发送到服务器. receive:从服务器接收消息. 服务器也有两个线程,它们永远都在运行 accept_cleint:接受来自客户端的传入连接. ..
发布时间:2020-05-13 22:59:36 Python

从其他线程访问VT数据是否安全?

从辅助线程更改VirtualTreeView数据是否安全? 如果是的话,我应该使用关键部分(甚至是同步方法)吗? 恐怕当我要从另一个线程写入VT的数据记录时,主线程会同时调用其重绘,并且此刷新将导致一次读取同一记录.我会补充一下,我在应用程序中仅使用2个线程. 类似... type PSomeRecord = ^TSomeRecord; TSomeRecord = rec ..

从库中捕获主线程SynchronizationContext或Dispatcher

我有一个C#库,希望能够将工作发送/发布到“主" ui线程(如果存在). 该库可用于: winforms应用程序 本机应用程序(带有UI) 控制台应用程序(无UI) 在库中,我想在初始化期间捕获某些东西(一个SynchronizationContext,一个Dispatcher,一个Task Scheduler或其他东西),这将使我能够(稍后)将工作发送/发布到主线程(如果主线程具 ..
发布时间:2020-05-13 22:49:00 C#/.NET

在Java中,如果集合是只读的,我是否需要声明其集合已同步?

当我的J2EE Webapp启动时,我一次填充了一个集合. 然后,几个线程可能会同时访问它,但只能读取它. 我知道对于并行写入必须使用同步集合,但是对于并行读取仍需要它吗? 解决方案 通常不会,因为在这种情况下您不会更改集合的内部状态.在集合上进行迭代时,将创建一个新的迭代器实例,并且迭代状态是每个迭代器实例. 旁注::请记住,通过保留只读集合,您只能防止对集合本身进行修改.每 ..
发布时间:2020-05-13 22:45:07 Java开发

简化VCL线程包装器代码

我正在使用线程包装器,它检查是否从主线程调用了更新VCL(也有一些参数)的函数,然后始终在主线程的上下文中执行. 它可以工作,但我想使其更简单.问题是我必须在每个需要VCL同步的函数中都重复此代码,这容易出错.有没有办法使这个包装器更简单,更可重用?请注意,这个特定的包装器仅使用一个参数,但是可以将任意数量的参数复制到TLocalArgs并继续传递. 当前代码: boost::s ..
发布时间:2020-05-13 22:44:15 其他开发

用SRW锁替换关键部分

如果该应用程序针对Windows Vista或更高版本,我们是否可以替换所有谢谢! 解决方案 请参阅Joe Duffy的书"Windows上的并行编程",第289页. 您的问题的简短答案是“几乎".递归获取的CRITICAL_SECTION的语义与SRWL的语义不同.如果您的程序利用了Win32关键部分的这些特性,那么您将无法轻松地批量切换到SRWL.但是,您可以将SRWL包装在包装 ..
发布时间:2020-05-13 22:33:38 其他开发

什么是“锁是昂贵的操作"的原因?经常被说出来吗?

我已经阅读了很多有关线程的资料,以及涉及的所有同步机制.我也了解未正确执行操作的危险. 我刚刚观看了此 PDC 2009视频关于并行性和并发性,但这还没有再次提到“锁是昂贵的操作".现在,我在各种教科书中都遇到过这样的短语,而且我听说该领域的专家也这么说过. 我想知道,获取锁(互斥锁或信号灯)到底有什么昂贵?它是否导致在汇编程序级别发出LOCK#指令的事实? 获取锁是否需要对操作 ..
发布时间:2020-05-13 22:33:26 其他开发

Java多线程数据库访问

对于多线程Java应用程序确保所有线程同步访问db的最佳解决方案是什么?例如,每个线程代表单独的事务,然后首先检查db的值,然后根据答案必须插入或更新数据库中的某些字段(请注意在check,insert和commit应用程序之间进行其他处理).但是问题是,另一个线程可能在同一张表上做同样的事情. 更具体的例子.线程T1开始事务,然后检查表ENTITY_TABLE中是否存在代码为"111"的条 ..
发布时间:2020-05-13 22:29:31 Java开发

线程安全与同步

我是Java新手. 我在Threadsafe和Synchronized之间有些困惑. 线程安全意味着一个方法或类实例可以被多个线程同时使用,而不会发生任何问题. “同步"表示一次只能有一个线程运行. 那么它们如何相互联系? 解决方案 如果一个类从多个线程访问时能正确运行,则该类是线程安全的,而与运行时环境对这些线程的执行进行调度或交织无关,并且在调用方没有任何其他同步或其他协调的 ..

在Java中实现自己的阻塞队列

我知道这个问题以前已经被问过很多次,但是我只是想不通互联网上的例子,例如这两种解决方案都在put()方法中检查阻塞队列的数组/队列/链表是否为notifyAll等待线程,反之亦然.第二个链接中的评论强调了这种情况,并指出这是不必要的. 问题是;检查队列是否为空对我来说似乎也有些奇怪.通知所有正在等待的线程.有什么想法吗? 谢谢. 解决方案 到目前为止,我知道这是一个老问题,但是 ..

DB事务还是Java DAO的方法同步?

我有基于Java的Web服务器,也有带有方法的DAO单例对象,其SQL操作的逻辑必须以某种方式进行同步以保证数据 完整性(可以同时从多个Java线程访问方法). 我想知道在服务器端,DB事务包装(可序列化级别)是否优于DAO的方法显式同步? 解决方案 是的,使用事务更好.通过同步代码,锁定类,该锁定的范围就是您的类加载器,并且站起来应用程序的第二个实例将使您的锁定无效,因为这两个实例 ..
发布时间:2020-05-13 22:13:08 Java开发

在Java中以循环方式运行线程

我是Java中的多线程和同步的新手.我正在尝试实现一项任务,其中给了我5个文件,每个文件将由一个特定的线程读取.每个线程应从文件读取一行,然后将执行转发到下一个线程,依此类推.当所有5个线程都读取第一行时,然后再次从线程1运行行号开始.文件1中的2,依此类推. Thread ReadThread1 = new Thread(new ReadFile(0)); Thread R ..
发布时间:2020-05-13 22:10:24 Java开发