gcc编译多线程
Ⅰ gcc纠错,一个有错误的多线程求孪生素数的c程序,20小时之内解决追加悬赏分
~~ 能不能把你的问题再说清楚一点? 我跑你的程序 我看到输出了。我看你程序就只有一个printf()函数~~
unsigned int size = ((totbits / 32)) + 1;
bitArray = malloc((sizeof(unsigned int)) * size);
这两条语句是不是应该写在 while()循环的后面?否则你的数大于1000就会出现段错误了
你编译的时候有加多线程连接选项吗? 要加上 -lpthread 或者 -pthread (尽量选后者)
例如 gcc -pthread -o test main.cpp
另外你的线程创建的不对,函数指针不能强转类型(这里也不用转)
pthread_create(&procter_t,NULL,(void*)procter_f,NULL);
pthread_create(&consumer_t,NULL,(void*)consumer_f,NULL);
应该是
pthread_create(&procter_t,NULL,procter_f,NULL);
pthread_create(&consumer_t,NULL,consumer_f,NULL);
Ⅲ 用gcc怎么编译多线程程序 最好写出命令来
果已经写好了源文件,那么cd进所在的目录gccfilename.c-ofilename./filename
Ⅳ 现在用gcc编译出来的程序能在多个核的cpu上一起跑吗还是只能在一个核上跑
gcc编译出来的程序能在多个核的cpu上一起跑,也可以在一个核心上执行——至少MinGW开发的多线程程序在Win2003的确如此。
国外很早就有人研究多核心进程调度问题,国内研究的人似乎不普遍。
Ⅳ LINUX中GCC支持C++线程吗如果支持那么C++的线程库是什么
#include <thread> // GCC 4.7
#include <thread> // VC++11.0
#include <thread>
#include <iostream>
int main() {
std::thread t1([]() {
std::cout << "Hello," << std::endl;
});
std::thread t2([]() {
std::cout << "Fuck" << std::endl;
});
t1.join();
t2.join();
system("pause");
}
Ⅵ gcc编译线程程序,为什么要加-lpthread,头文件已经包含了<pthread.h>了啊
-lpthread是链接库,
<pthread.h>只有申明,实现部分都在库里面。
创建线程时一般是把函数的指针做参数,所以要加一个取地址符号。
ret=pthread_create(&id,NULL,(void *)&thread,NULL);
另外,建议要检查一下创建线程的返回值ret是否成功,防止影响后面的代码。
(6)gcc编译多线程扩展阅读:
每个语言编译器都是独立程序,此程序可处理输入的原始码,并输出组合语言码。全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的原始码,并产生一抽象语法树,以及一翻译此语法树成为GCC的暂存器转换语言〈RTL〉的后端。
编译器最佳化与静态程序码解析技术(例如FORTIFY_SOURCE,一个试图发现缓冲区溢位〈buffer overflow〉的编译器)在此阶段应用于程序码上。最后,适用于此硬件架构的组合语言程序码以Jack Davidson与Chris Fraser发明的算法产出。
Ⅶ gcc 编译选项 -pthread -lpthread 异同
-pthread 比 -lpthread 多了一个宏定义 -D_REENTRANT
对于多线程程序来说这个宏非常重要,这个宏会让libc和一些其他库,自动选择线程安全的函数实现(很多函数有线程安全和不安全的2种实现版本)
所以建议使用-pthread 或者加上 -D_REENTRANT.
Ⅷ 如何用gcc在linux下编译多线程c语言程序
如果已经写好了源文件,那么cd进所在的目录gccfilename.c-ofilename./filename
Ⅸ 关于openmp 多线程能不能不用gcc
openmp默认使用schele取决于编译器实现gcc默认使用schele(dynamic,1)态调度并且块1程序面种调度及其低效看代码都能预期太能比单线程快
态调度种简单理解式计算任务存任务队列面for循环每i值应计算任务每线程每提取批任务计算批少呢前面说块程序面1提取任务需要操作呢任务队列线程共享提取任务前必须加锁读取批队列移除解锁说应该已经知道原
线程提取计算任务任务完快所16线程排着队逐加锁抢任务解锁让其线程继续抢马发现任务快要重新排队等任务始终处于饥饿状态注意排队候能要占cpu使用busy wait所能看十六核满负荷其实啥没干
我建议使用static schele或者增加dynamic schele块比1024取决于循环少般知道每循环执行间基本都并且专用服务器设置affinity其负荷oversubscriptionnuma问题static schele比较选择每线程做哪些任务需要进行配化openmp本身消耗
Ⅹ c的多线程实现
1.pthread(Posix thread)
2.Sort of.