Cik*_*Cik 4 c++ multithreading stl
我创建了一个类SettingsClass,它包含静态字符串,用于保存MySQL C++连接器库使用的db连接字符串(例如hostname,dbname,username,password).
只要函数需要连接到数据库,它就会在这些静态字符串上调用.c_str()函数.例如:
Class SettingsClass
{
public:
static string hostname;
...
}SettingsClass;
string SettingsClass::hostname;
//A function that needs to connect to the DB uses:
driver = get_griver_instance();
driver->connect(SettingsClass.hostname.c_str(),...);
Run Code Online (Sandbox Code Playgroud)
静态字符串在进程生命周期中填充一次.其值从配置文件中读取.
我的应用程序是多线程的.我是否以安全的方式使用c_str()?
c_str()本身应该是线程安全的.但是,如果你有另一个访问(写入)你正在使用c_str()的字符串的线程,那么你正在玩一个坐在汽油池中的匹配.
通常c_str()是通过在现有字符串的末尾添加零值(空字符0x00,而不是0的字符,即0x30)来实现的(如果还没有那个),并传回where的地址字符串存储.
有兴趣的人可以在这里阅读libstdc ++代码: libstdc ++,basic_string.h 有趣的行是1802和294 - 1802是c_str()函数,294是c_str()调用的函数.