小编roy*_*ybj的帖子

std :: to_string线程安全吗?

我期待将整数类型转换为字符串使用std::to_string,但我看到这段:

std::to_string依赖于std::locale格式化目的,因此std::to_string来自多个线程的并发调用可能导致调用的部分序列化.

但是我找不到关于这个主题的任何其他内容,谷歌没有像MSDN那样提出任何问题.如果重要的话,我正在使用Visual Studio 2013.

这个线程安全吗?如果是这样,怎么样?

c++ multithreading language-lawyer c++11

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

使用简单的CRITICAL_SECTION,似乎陷入僵局

我有一个使用CRITICAL_SECTION的简单C程序.由于某种原因,它似乎一次又一次地进入CRITICAL_SECTION并且没有真正执行内部代码,导致线程死锁.我似乎无法找到原因.

这是代码:

#include <windows.h>
#include <iostream>

#define N 100000000

CRITICAL_SECTION cs;

static DWORD WINAPI safe_increment(void *param)
{
   volatile long* x = (volatile long*)param;
   for(int i=0;i<N;++i)
      EnterCriticalSection(&cs);
      ++(*x);
      LeaveCriticalSection(&cs);
   return 0;
}

void main()
{
   InitializeCriticalSection(&cs);

  volatile long x = 0;

  HANDLE h[2];
  DWORD thread_id;

   int x = 0;

   h[0] = CreateThread(NULL,0,safe_increment,(void*)&x,0,&thread_id);
   h[1] = CreateThread(NULL,0,safe_increment,(void*)&x,0,&thread_id);
   WaitForMultipleObjects(2,h,TRUE,INFINITE);
   CloseHandle(h[0]);
   CloseHandle(h[1]);

   DeleteCriticalSection(&cs);

   std::cout << "Result of safe increment: " << x << "\n";
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

罗伊.

c++ multithreading critical-section

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