我期待将整数类型转换为字符串使用std::to_string,但我看到这段:
std::to_string依赖于std::locale格式化目的,因此std::to_string来自多个线程的并发调用可能导致调用的部分序列化.
但是我找不到关于这个主题的任何其他内容,谷歌没有像MSDN那样提出任何问题.如果重要的话,我正在使用Visual Studio 2013.
这个线程安全吗?如果是这样,怎么样?
我有一个使用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)
谢谢!
罗伊.