首页 / 知识
关于多线程:如何在普通C语言中启动线程?
2023-04-14 23:52:00

How do I start threads in plain C?我已经在C语言中使用fork()启动了另一个进程。 如何启动新线程? 自从您提到fork()以来,我假设您使用的是类似Unix的系统,在这种情况下,您要使用POSIX线程(通常称为pthread)。 具体来说,pthread_create()是创建新线程所需的函数。它的参数是:
第一个参数是返回的线程ID指针。第二个参数是线程参数,除非您想以特定优先级启动线程,否则它可以为NULL。第三个参数是线程执行的函数。第四个参数是执行时传递给线程函数的单个参数。 AFAIK,ANSI C没有定义线程,但是有各种可用的库。 如果您在Windows上运行,请链接到msvcrt并使用_beginthread或_beginthreadex。 如果您在其他平台上运行,请签出pthreads库(我确定还有其他)。 线程不是C标准的一部分,因此使用线程的唯一方法是使用某些库(例如:Unix / Linux中的POSIX线程,_beginthread / _beginthreadex,如果您想使用该线程中的C运行时或仅使用CreateThread Win32 API) pthreads是一个好的开始,请看这里
C11线程+ C11 已添加到glibc 2.28。通过从源代码编译glibc 2.28,在Ubuntu 18.10 amd64(glic 2.28附带)和Ubuntu 18.04(glibc 2.27附带)中进行了测试:在单个主机上有多个glibc库 改编自以下示例:https://en.cppreference.com/w/c/language/atomic main.c
GitHub上游。 编译并运行:
可能的输出:
由于跨线程访问非原子变量,非原子计数器很可能小于原子计数器。 另请参阅:如何在C中进行原子增量和获取? 拆卸分析 拆卸:
包含:
因此我们看到原子增量是在指令级别使用
使用
因此,原子版本实际上具有一个 基准测试 去做。创建一个基准以显示原子速度较慢。 POSIX线程 main.c
编译并运行:
第一次运行正常,第二次运行由于缺少同步而失败。 似乎没有POSIX标准化的原子操作:UNIX可移植原子操作 在Ubuntu 18.04上测试。 GitHub上游。
GCC
对于那些没有C11的对象,可以使用 main.c
编译并运行:
输出和生成的程序集:与" C11线程"示例相同。 已在Ubuntu 16.04 amd64,GCC 6.4.0中测试。 检出pthread(POSIX线程)库。 |
最新内容
相关内容
linux的u盘启动命令?
linux的u盘启动命令?,系统,电脑,工具,信息,软件,网上,名称,工作,设备,通用,从U盘启动linux系统1、在启动界面上选择启动 Linux,进入安装界面。linux防火墙命令启动?
linux防火墙命令启动?,系统,状态,管理,密码,服务,工具,防火墙,网络,信息,软件,如何在Linux中启动/停止和启用/禁用FirewallD和Iptables防火墙linux线程查询命令?
linux线程查询命令?,系统,第一,线程,命令,软件,名称,信息,进程,选项,方法,Linux系统如何查看进程的线程数1、第一种方法:top命令法首先执行toplinux退出启动命令行?
linux退出启动命令行?,系统,状态,档案,平台,命令,环境,模式,终端,程序,编辑,linux如何退出命令操作界面1、在Linux系统中,按下Ctrl+Alt+F2可以关闭启动linux的命令?
关闭启动linux的命令?,服务,系统,命令,代码,手机,软件,密码,管理,信息,状态,linux防火墙关闭和开启命令1、打开Linux系统进入桌面,点击上方菜单linux中启动服务命令?
linux中启动服务命令?,服务,系统,命令,信息,工作,设备,网络,标准,名称,密码,linux如何启动服务1、具体步骤如下:首先,我们需要修改mysql的配置文linux多线程下载命令?
linux多线程下载命令?,软件,工具,平台,中心,系统,代理,网络,网站,手机,官方网站,从linux服务器中下载或上传文件wget是linux下一个从网络上自linux永久启动命令?
linux永久启动命令?,系统,服务,密码,软件,工具,电脑,位置,环境,状态,发行,linux永久开启防火墙路由转发首先在命令行输入:cat/proc/sys/net/ipvlinux命令行启动软件?
linux命令行启动软件?,系统,工具,软件,位置,密码,电脑,首页,代码,环境,地方,linux怎么打开命令行窗口1、在Linux系统中,打开命令行窗口需要使用linux断开线程命令?
linux断开线程命令?,系统,状态,工作,代码,线程,入口,网络,管理,名称,命令,linux下C中怎么让才能安全关闭线程方法:在线程入口函数中,调用returnlinux命令是什么语言?
linux命令是什么语言?,系统,环境,代码,传播,管理,语言,操作系统,源码,自由,部分,dos和linux的命令行里面用的是什么语言?1、DOS/Windows/Linuxlinux命令设置自启动?
linux命令设置自启动?,服务,系统,信息,数字,检测,工具,状态,密码,跨行,脚本,linux下通过脚本实现自动重启程序自动重启脚本 假定需要实现重启