gpt4 book ai didi

c - 用C编写多线程代码来读取文件

转载 作者:行者123 更新时间:2023-11-30 19:26:12 25 4
gpt4 key购买 nike

我正在自学c中的线程,发现它很难理解。这个问题是我从书上找到的。任务是创建三个单独的线程来从文件文本中读取单独的行。该文件记录了 3 个数字、3 个字母和 3 个符号。

1
2
3
A
B
C
#
@
!

它要求创建三个线程来读取数字字母和符号,并使用 pthread 打印它们。

示例输出:

数字:1 字母:符号:#

如果有人可以帮助我或提供一个可以开发成这样的简单示例/框架代码,那就意味着很多。

感谢您的时间和关注。我找不到类似的东西。

最佳答案

从你的问题来看,并不清楚线程应该如何表现。问题之一是,当您从文件中读取行时,在读取之前您不知道该行包含什么内容。因此,不可能产生单独的线程来读取不同类型的行。

可以做的是让一个主进程从文件中读取一行,然后生成一个可以对读取的行执行某些操作的线程。

因此,您的骨架程序可能如下所示:

 loop (read-line)
if line is a number --> spawn the thread for numbers
else if line is a char --> spawn the char thread
else if line is a punctuation --> spawn the punctuation thread
end loop
join all threads.

当然,这会产生与文件中的行一样多的线程。你需要保留他们的ID,以便最后一一加入他们。在这种情况下,您可能可以不进行同步。

另一种方法是预先创建 3 个线程并向它们提供正确的数据。这比较复杂,但会节省资源:

  start 3 threads for different types
loop (read-line)
if line is a number --> wake up the thread for numbers
else if line is a char --> wake up the char thread
else if line is a punctuation --> wake up the punctuation thread
end loop
signal all threads to finish
join 3 threads

您需要为此(或其他信号方案)使用条件变量。

关于c - 用C编写多线程代码来读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57841944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com