在用户空间用 C 编程。
我有一个场景,我正在解析(字符串操作)一个文本文件(infile)以创建另一个文本文件(outfile)。
我想到的设计是:
我不断地逐个字符地阅读以从 inFile 中形成一行。创建一个线程来执行一些字符串操作,最终该线程最终会将新行写入 outfile。
显然,我必须同步正在写入 outfile 的线程;但我还必须以这样的方式同步它们,即如果线程 1 解析 line1,thread2 解析 line2; thread1 应该是第一个获取锁以写入 outfile 的线程。这是为了使 outfile 中的文本与 infile 中的文本行相匹配。
基本上有一个类似于票证的机制,锁定应该检查票证。
我如何在 C 中实现这一点?
最佳答案
你不能那样做。如果这样做,每个人都将被阻止,您只需序列化整个过程即可。
相反,您让解析线程将其结果发布到(线程安全的)优先级队列,然后由单个线程读取该队列以写入文件。
关键因素是解析的行进入优先级队列,其行号是确定优先级的组件,读取队列的线程将跟踪它看到的最后一个行号。然后它查看队列的顶部,检查它是否是“下一行”。如果是,则将其从队列中删除并写入文件。如果没有,它会暂停片刻(可能是快速休眠,或者以某种方式等待下一个队列插入),直到队列顶部实际上是它正在寻找的下一行。
关于c - 如何保证C中的锁定顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32983883/