使 printf 线程安全?

问题描述 投票:0回答:2

我有多个线程使用“printf”。 “Printf”不是线程安全的。 那么我可以在它周围使用互斥锁来使其线程安全吗? 还是仍然存在并发问题?

// member
std::mutex mtxTcp;

// inside a function
      mtxTcp.lock();
      printf("Hello %d\n", u16Id);
      mtxTcp.unlock();
c++
2个回答
1
投票

是的,但不要直接使用互斥锁:

{  // added scope
      std::lock_guard lock{mtxTcp};
      printf("Hello %d\n", u16Id);
}

0
投票

printf
是线程安全的,引用 7.21.2 Streams。 ISO/IEC 9899:202x。编程语言 — C:

每个流都有一个关联的锁,用于防止多个执行线程访问流时发生数据争用,并限制多个线程执行的流操作的交错。一次只有一个线程可以持有该锁。锁是可重入的:单个线程可以在给定时间多次持有锁。

所有读取、写入、定位或查询流位置的函数都会在访问流之前锁定该流。当访问完成时,它们释放与流关联的锁。

因此您不需要添加自己的同步。

© www.soinside.com 2019 - 2024. All rights reserved.