c - 如何在C/Cilk中以线程安全的方式打印?

标签 c multithreading string cilk

我正在使用 Cilk,但在同步打印方面遇到问题。打印速度很慢,因此很难保持打印同步。例如...

void ftn(int x)
{
    if (x % 2 == 0)
    {
        std::cout << "printing.. " << x << std::endl;
    }
    else
    {
        cilk_spawn ftn(x/2);
        cilk_spawn ftn(x++);
        cilk_spawn ftn(x*x);

        cilk_sync;
    }

}

在大多数情况下,打印是可以的。但是,它偶尔会不同步,并且来自另一个线程的第二个打印语句将在一个线程的打印语句的中间开始。

如何使 C/Cilk 打印线程安全?我如何确保它们保持同步?

最佳答案

您需要某种形式的互斥结构(例如锁)来防止多个线程混淆其输出 - 在调用 cout 之前获取锁,然后释放它。我不熟悉 Cilk,但它应该具有执行此操作的结构。

既然你说你只是在玩玩,这应该可以正常工作,但除此之外,锁很昂贵,通常应该避免。但在实际应用程序中,各个线程通常不会“打印”任何内容 - 它们主要对独立的数据集执行计算 - 因此不会出现您所描述的问题。

关于c - 如何在C/Cilk中以线程安全的方式打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3845946/

相关文章:

c - 在 C 编程中将结构体数组传递给函数

c - 链表的问题)

c++ - 检查数组元素是否为空

multithreading - ARM STLR 内存排序语义

Java池连接优化

c# - 正则表达式围绕大括号拆分

string - Ada 用 Null 填充常量字符串

c - epoll:使用具有多个 fd 的结构表时如何识别哪个 fd 已准备好

multithreading - iOS4 & 背景 [UIImage setImage :]

python - 在 Python 中将字符串拆分为 2