标签: thread-safety

我在哪里可以获得线程安全的CollectionView?

在后台线程上更新业务对象的集合时,我收到以下错误消息:

这种类型的CollectionView不支持从与Dispatcher线程不同的线程更改其SourceCollection.

好的,这是有道理的.但它也引出了一个问题,什么版本的CollectionView支持多个线程,如何让我的对象使用它?

.net wpf multithreading thread-safety collectionview

68
推荐指数
4
解决办法
4万
查看次数

C++中高效的线程安全单例

单身类的通常模式就像

static Foo &getInst()
{
  static Foo *inst = NULL;
  if(inst == NULL)
    inst = new Foo(...);
  return *inst;    
}
Run Code Online (Sandbox Code Playgroud)

但是,我的理解是这个解决方案不是线程安全的,因为1)Foo的构造函数可能被多次调用(可能或可能不重要)和2)inst在返回到不同的线程之前可能没有完全构造.

一种解决方案是围绕整个方法包装一个互斥锁,但是在我真正需要它之后很长时间我就要付出同步开销.另一种选择是

static Foo &getInst()
{
  static Foo *inst = NULL;
  if(inst == NULL)
  {
    pthread_mutex_lock(&mutex);
    if(inst == NULL)
      inst = new Foo(...);
    pthread_mutex_unlock(&mutex);
  }
  return *inst;    
}
Run Code Online (Sandbox Code Playgroud)

这是正确的做法,还是我应该注意哪些陷阱?例如,是否存在可能发生的静态初始化顺序问题,即在第一次调用getInst时,inst总是保证为NULL?

c++ singleton pthreads thread-safety

67
推荐指数
4
解决办法
7万
查看次数

多线程程序停留在优化模式下,但在-O0下正常运行

我编写了一个简单的多线程程序,如下所示:

static bool finished = false;

int func()
{
    size_t i = 0;
    while (!finished)
        ++i;
    return i;
}

int main()
{
    auto result=std::async(std::launch::async, func);
    std::this_thread::sleep_for(std::chrono::seconds(1));
    finished=true;
    std::cout<<"result ="<<result.get();
    std::cout<<"\nmain thread id="<<std::this_thread::get_id()<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

它通常表现在调试模式下在Visual Studio中-O0GC c和后打印出的结果1秒钟。但是它卡住了,在“ 释放”模式或中不打印任何内容-O1 -O2 -O3

c++ multithreading thread-safety data-race

67
推荐指数
3
解决办法
5653
查看次数

线程安全的单元测试?

我写了一个类和许多单元测试,但我没有让它线程安全.现在,我想让类线程安全,但为了证明它并使用TDD,我想在开始重构之前编写一些失败的单元测试.

有什么好办法吗?

我的第一个想法是创建一些线程并让它们以不安全的方式使用该类.用足够的线程做足够的时间,我一定会看到它破裂.

.net c# nunit unit-testing thread-safety

66
推荐指数
3
解决办法
1万
查看次数

java.sql.Connection线程安全吗?

重新解释一下这个问题:我应该避免共享java.sql.Connection在不同线程之间实现的类的实例吗?

java multithreading jdbc dbconnection thread-safety

61
推荐指数
2
解决办法
4万
查看次数

Joda-Time DateTimeFormatter类线程安全吗?

乔达时间 DateTimeFormatter线程安全的?一旦我从中获取实例DateTimeFormat.forPattern,它的各种解析方法可以被多个线程调用吗?DateTimeFormatter的Javadocs没有提到线程安全性.

java date-format thread-safety jodatime

59
推荐指数
3
解决办法
2万
查看次数

RestTemplate线程安全吗?

Spring是否是RestTemplate线程安全的?那是

  • RestTemplate多个连接可以安全共享的策略对象.要么
  • 是一个RestTemplate连接对象(如数据库连接),在使用时无法共享,并且需要为每个连接重新创建或池化.

java rest spring thread-safety

59
推荐指数
1
解决办法
3万
查看次数

函数静态变量是否在GCC中是线程安全的?

在示例代码中

void foo()
{
  static Bar b;
  ...
}
Run Code Online (Sandbox Code Playgroud)

使用GCC编译是否可以保证b以线程安全的方式创建和初始化?

在gcc的手册页中,找到了-fno-threadsafe-statics命令行选项:

不要发出额外的代码来使用C++ ABI中指定的例程来进行本地静态的线程安全初始化.您可以使用此选项在不需要线程安全的代码中略微减小代码大小.

  1. 这是否意味着,默认情况下,GCC的本地静态是线程安全的?所以没有理由明确保护,例如pthread_mutex_lock/unlock

  2. 如何编写可移植代码 - 如何检查编译器是否会添加其防护?或者关闭GCC的这个功能是否更好?

c++ static gcc initialization thread-safety

58
推荐指数
4
解决办法
3万
查看次数

Cipher线程安全吗?

很简单,可以从多个线程中使用javax.crypto.Cipher(例如Cipher.getInstance("RSA"))一个实例,还是需要在ThreadLocal(在我的情况下)将多个实例中的多个实例中使用?

java encryption multithreading thread-safety

58
推荐指数
4
解决办法
2万
查看次数

如何使应用程序线程安全?

我认为线程安全,特别是意味着它必须满足多线程访问相同共享数据的需要.但是,似乎这个定义还不够.

任何人都可以列出要完成或处理的事情,以使应用程序线程安全.如果可能的话,给出一个关于C/C++语言的答案.

c c++ concurrency multithreading thread-safety

57
推荐指数
2
解决办法
4万
查看次数