相关疑难解决方法(0)

cout同步/线程安全吗?

一般来说,我假设流不同步,由用户做适当的锁定.但是,做cout标准库中的特殊处理吗?

也就是说,如果多个线程正在写入,cout它们会破坏cout对象吗?据我所知,即使同步,你仍然会得到随机交错的输出,但保证交错.也就是说,cout从多个线程使用是否安全?

该供应商是否依赖?gcc做什么?


重要提示:如果您说"是",请为您的答案提供某种参考,因为我需要某种证明.

我关注的还不是基础系统调用,这些都很好,但是流在顶部添加了一层缓冲.

c++ gcc c++11

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

如何初始化标头中的静态成员

给定是一个具有静态成员的类.

class BaseClass
{
public:
    static std::string bstring;
};
Run Code Online (Sandbox Code Playgroud)

字符串显然是在类之外进行默认初始化.

std::string BaseClass::bstring {"."};
Run Code Online (Sandbox Code Playgroud)

如果我在标题中包含上面的行以及类,我会收到symbol multiply defined错误.它必须在单独的cpp文件中定义,即使使用include guardspragma once.

有没有办法在标题中定义它?

c++ class static-members

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

反正有没有把以下内容写成C++宏?

my_macro << 1 << "hello world" << blah->getValue() << std::endl;
Run Code Online (Sandbox Code Playgroud)

应该扩展到:

std::ostringstream oss;
oss << 1 << "hello world" << blah->getValue() << std::endl;
ThreadSafeLogging(oss.str());
Run Code Online (Sandbox Code Playgroud)

c++ logging thread-safety ostringstream

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

std::cout 线程安全格式化和 io 操作

假设您有两个线程。第一个线程尝试使用std::dec以下方法:

std::cout << std::dec << 123 << std::endl;
Run Code Online (Sandbox Code Playgroud)

第二个线程尝试使用以下方法将整数打印为十六进制 std::hex以下方法:

std::cout << std::hex << 0x321 << std::endl;
Run Code Online (Sandbox Code Playgroud)

是否保证 123 将打印为十进制而 0x321 将打印为十六进制?如果不是,我如何std::cout在多线程环境中进行正确的格式化?

C++20 有std::osyncstream. 但是在 C++20 之前我们可以使用什么?

c++ multithreading iostream

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

ofstream线程是否安全?

我正在开发一个程序,它使用多个std::ifstreams来读取二进制文件,std::ifstream每个线程一个.现在我需要知道,如果std::ofstream在Windows和Linux上是线程安全的,那么在同一个文件中写入.我只使用一个std::ofstream并使用多个线程.
我读通过利用每个线程和写作使用的输出文件的块不同的块seekp()write().目前它对我有用,但它是否对大文件有问题.

std::ofstream线程安全的?

c++ multithreading

5
推荐指数
2
解决办法
1万
查看次数

std::osyncstream 的用途?

std::osyncstream新的 C++20 ( http://en.cppreference.com/w/cpp/io/basic_osyncstream )有什么用途?不是std::ostream已经线程安全了吗?

c++ c++20

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