C线程在Linux?

有人有一个线程简单的例子吗?

我想要构build一个小的控制台应用程序,它将逐行读取一个txt文件文件,然后使用线程来处理整个txt。 我应该怎么做? 将txt分割成X = N的线程,是我想到的第一件事情,还有更好的办法吗?

搜索POSIX线程,也被称为pthreads。 这里的教程

恕我直言,最好的选择是使用POSIX线程。 你可以在这里看到更多的细节。

也请查看詹姆斯答案中的链接。

搜索pthreads。 我也是一个线程新手。 这是一个代码片段总和从1到1000000000(也是我的第一个工作pthread程序)。

#include <stdio.h> #include <pthread.h> struct arg { int a, b; int *rst; }; typedef struct arg arg; void* sum(void *); int main() { pthread_t sum1, sum2; int s1, s2; pthread_create(&sum1, NULL, sum, &(arg){1, 500000000, &s1}); pthread_create(&sum2, NULL, sum, &(arg){500000001, 1000000000, &s2}); pthread_join(sum1, NULL); pthread_join(sum2, NULL); printf("%d\n", s1 + s2); } void* sum(void *ptr) { int i, temp = 0; arg *x = ptr; for(i = x->a; i <= x->b; ++i) temp += i; *(x->rst) = temp; } 

如果你想要一个简单的方法,OpenMP是一个强大的多线程库,它受gcc支持。

  #omp parallel for for(i=0; i<1000; i++){ a[i] = b[i] + c[i]; } 

这将执行两个数组的简单添加并将结果存储在“a”中,但是在四核机器上将产生4个线程来处理它(如果支持超线程,则为8)。

在Linux上轻松实现多核编程。 🙂

芬兰人的指南: http : //bisqwit.iki.fi/story/howto/openmp/

首先是问自己是否真的需要在这里进行多线程。 你需要线程之间的共享状态,例如,解析来自所有URL的信息是否在相同的数据结构中结束? 如果不是,进程(fork)可能就足够了。 或者你甚至可能不会走那么远,只是使用基于事件的编程(glib,libev)。

即使你决定使用线程,Glib也许是值得的,因为它有一个体面的线程抽象,包括线程池。 这将使分区文件非常容易,因为您只需创建X个线程池,然后将dl / parse池添加到其中的一个(行号%池大小)。

如果只是加速下载,也许你的HTTP库已经有相关的功能。 对于卷曲,有一堆curl_multicalls, 这里有一个有趣的例子 。

把txt分割成X = N的线程,是我想到的第一个东西,还有更好的办法吗?

这取决于你的应用程序。

  • 线程可能有助于解释数据是瓶颈,性能增益将受到文件I / O速度的限制
  • 如果读取文件是线程瓶颈,则线程无法帮助,磁盘I / O受硬件限制,并且只会在更多线程请求数据时降级

如果解释信息需要很长时间,你可以使用像生产者消费者模式的东西,并测试自己需要多少线程。 (尝试一个较低的数字,看看有多少给你最好的表现)。 一些例子可以在这里和这里找到

正如其他答案指出,你可以使用pthreads来实现线程。