c - 按顺序从线程写入位序列

标签 c multithreading binary openmp bit-shift

我有并行程序。在每个线程上,a 都有一个存储在 char* 中的位序列。
当我思考如何将这些位写入文件时,我的大脑会出现段错误。第一个线程中的位,然后是第二个线程中的位,依此类推,没有 0 需要具有完整字节。

我的一个例子将非常有用。数据这么小,可能有 100MB
线程 1:13 位 1011 1111 0110 0(000) 因为我无法存储 13 位,但我可以存储 2 个字节
线程2:9位1001 1011 0(000 0000)
线程 3:7 位 1011 111(0)
线程 4:5 位 0001 1(000)

问题: 我怎样才能得到文件或 char* 中的最终结果?
1011 1111 0110 0100 1101 1010 1111 1000 11(00 0000)

如果有帮助,当这些位来自不同的线程时,我可以放置\'
1011 1111 0110 0'100 1101 10'10 1111 1'000 11(00 0000)

最佳答案

您不能直接从线程执行文件 I/O,因为这不会执行任何同步,并且事情不会以正确的顺序结束。

如果您事先知道每个线程可以生成多少位,我只需在父进程中预先分配存储,并将其工作区域交给每个线程即可。然后,当线程加入时,父进程可以按正确的顺序写出数据。

关于c - 按顺序从线程写入位序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47548227/

相关文章:

c - 将源文件列表导入 Eclipse 项目

java - 同步两个线程

java - 在构造函数中创建防御副本的正确方法是什么

java - Long.parseLong 错误

c - 表示已知大小变量的表达式结果的最少位数?

c - 指针转换

c - 错误数组大小

计算超线程机器中的进程利用率

c - 在 C 中使用按位运算和指针算法将二进制转换为无符号整数

c - 获取数组元素的地址