标签: thread-safety

AWS 正在安全地发送电子邮件

AmazonSimpleEmailServiceClient.sendEmail() ;按照java文档使用

使用此客户端进行的所有服务调用都是阻塞的,并且在服务调用完成之前不会返回。

简单的问题是,它是线程安全的吗?多个线程可以使用同一个实例并行AmazonSimpleEmailServiceClient调用吗sendEmail()?就像,假设我的网站的多个用户试图同时在该网站上注册。

thread-safety amazon-web-services

1
推荐指数
1
解决办法
586
查看次数

future 是检查单个线程完成情况的安全方法吗?

我一直在研究 Boost 的 future,想知道它们是否是检查单个线程是否已完成的可接受且安全的方法。

我以前从未使用过它们,所以我编写的大部分代码都是基于Boost 的同步文档

#include <iostream>
#include <boost/thread.hpp>
#include <boost/thread/future.hpp>

int calculate_the_answer_to_life_the_universe_and_everything()
{
    boost::this_thread::sleep(boost::posix_time::seconds(10));
    return 42;
}

int main()
{
    boost::packaged_task<int> task(calculate_the_answer_to_life_the_universe_and_everything);
    boost::unique_future<int> f(task.get_future());

    boost::thread th(boost::move(task));

    while(!f.is_ready())
    {
        std::cout << "waiting!" << std::endl;
        boost::this_thread::sleep(boost::posix_time::seconds(1));
    }

    std::cout << f.get() << std::endl;

    th.join();
}
Run Code Online (Sandbox Code Playgroud)

这似乎在等待calculate_the_answer_to_life_the_universe_and_everything()线程返回42。这可能会出现问题吗?

谢谢!

c++ multithreading boost thread-safety

1
推荐指数
1
解决办法
512
查看次数

等待函数和 CloseHandle 依赖项

我决定使用Wait Functions (WaitForSingleObject、WaitForMultipleObject 等)来正确退出线程。在这种情况下,问题是我是否需要显式调用 CloseHandle(线程句柄)以避免内存泄漏或等待函数自行清理并关闭句柄?如果CloseHandle需要显式调用,我可以再次调用“ CreateThread(相同的线程句柄)吗?我可以再次调用GetExitCodeThread()吗?”吗?”

注意:一个 StackOverFlow 问题回答了我,第二部分说我无法再次调用 GetExitCode,但它并没有澄清在等待函数后缺少调用 CloseHandle 是否会导致内存泄漏。

c++ winapi memory-leaks thread-safety wait

1
推荐指数
1
解决办法
3969
查看次数

ConcurrentHashMap 中的 Treemap 线程安全吗?

我有一个嵌套地图的案例,如下所示:

private final static Map<String, TreeMap<Long,String>> outerConcurrentMap = new ConcurrentHashMap<>();
Run Code Online (Sandbox Code Playgroud)

我知道这ConcurrentHashMap是线程安全的,但我想知道TreeMap这个 CHM 持有的 s ,它们在 CHM 内部也是线程安全的吗?

我正在做的操作是:

  1. 如果未找到特定键 --> 创建新的 TreeMap 并针对键放置。
  2. 如果找到 key,则获取 TreeMap,并更新它。
  3. get(K)使用.从 CHM 检索 TreeMap
  4. 使用方法从 TreeMap 检索数据tailMap(K,boolean)
  5. clear()CHM。

在这种情况下我想要一个线程安全的结构。上述实现是否线程安全?如果没有,请提出解决方案。

java concurrency thread-safety concurrenthashmap treemap

1
推荐指数
1
解决办法
9225
查看次数

Clojure 一次重置多个原子

假设 foo 和 bar 是原子。

; consistent.
(reset! foo x)
; inconsistent x and y combination.
(reset! bar y)
; consistent.
Run Code Online (Sandbox Code Playgroud)

是否可以立即重置它们,以便其他线程看不到这种不一致?或者是否有必要将 x 和 y 捆绑成一个原子,而不是让 x 和 y 本身成为原子?

concurrency clojure thread-safety

1
推荐指数
1
解决办法
291
查看次数

TestNG:并行线程运行类安全吗?

当我并行运行测试类时,失败的测试数量比运行串行测试类时要高。为了调试目的,我在控制台上记录了很多内容,但在并行运行时几乎没有用,因为记录的所有内容都是混乱/无序的。

在我尝试修复日志记录问题以便更好地调试之前,我想知道,如果我设置了parallel="classes",它是否能保证线程安全?我假设如果我设置parallel="tests"两个方法可能会尝试访问范围内的同一对象,从而导致线程安全问题。

IE:

<suite name="test" parallel="classes" thread-count="3">
Run Code Online (Sandbox Code Playgroud)

java testng multithreading thread-safety

1
推荐指数
1
解决办法
6382
查看次数

Go 中的 len(channel) 是线程安全的吗?

一个通道可能被多个 Go 例程使用。使用某些 Go 例程中的 len(channel) 获取通道的长度是线程安全的吗?

channel thread-safety go

1
推荐指数
1
解决办法
2445
查看次数

当涉及高速网络消息传递时,使用易失性字典是一个不错的选择吗?

前提

我正在开发一个多人游戏,我有许多网络控制的演员,我决定将女巫的输入存储在一个易变的字典中:

public static volatile Dictionary<string, QuickMessage> quickPlayerMessages;
Run Code Online (Sandbox Code Playgroud)

并且每一帧演员都从该字典中获取他们的值,但与此无关,我还有一个接收器线程不断更新该字典,因此值会不断更改,并且键可能会被删除或添加到其中。我做了一些测试,这有效,但是......

我的顾虑

我不完全理解 volatile 修饰符,我知道它应该消除一些可能导致读取部分写入信息的优化。我还听说这并不像使用锁定机制那样真正起作用。虽然我确实选择了这个解决方案,因为它为我减少了很多复杂性,而且看起来它的响应速度相当快(速度方面),但我确实对此感到不安。

是否有任何可能出现的问题或我应该从这种方法中意识到的问题?

c# networking volatile thread-safety

1
推荐指数
1
解决办法
74
查看次数

如果循环是线程安全的,则线程安全

这个问题中的 while 循环是线程安全的:AtomicInteger thread safety。如果我在线程安全的 while 循环中插入 randomSum 方法,代码是否仍然是线程安全的?还是应该同步 randomSum 方法?

import java.util.ArrayList;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;

public class Print implements Runnable {
    static AtomicInteger atomicInteger = new AtomicInteger(0);
    static Random random = new Random(1);

    public static int randomSum() {
        int sum = 0;
        for (int i = 0; i < 10; i++) {
            sum += random.nextInt();
        }
        return sum;
    }

    @Override
    public void run() {
        while (atomicInteger.getAndIncrement() < 100)
            System.out.println(randomSum() + " " + Thread.currentThread());
    }

    public …
Run Code Online (Sandbox Code Playgroud)

java thread-safety atomicinteger

1
推荐指数
1
解决办法
33
查看次数

如何强制调用 const find

我用std::mapC++11编码。

我读过这个链接,它告诉我 C++11 标准保证 const 方法对容器的访问从不同的线程是安全的。

据我了解,这意味着它std::map::size()是线程安全的,因为这个函数被声明为size_type size() const noexcept;.

现在我想std::map::find线程安全地调用该函数。例如,if (mp.find(xxx) != mp.end()) {}但是,有两个版本find,一个是const,另一个是非consthttps : //en.cppreference.com/w/cpp/container/map/find

那么我怎么知道find调用的是哪个版本呢?如何强制find调用const-version以获得线程安全代码

我知道有一个 const 版本的std::map::cend(),会if (mp.find(xxx) != mp.cend()) {}按预期工作吗?

c++ stl thread-safety c++11

1
推荐指数
1
解决办法
88
查看次数