创建10个线程并发执行(STL/Windows/Linux)

news2025/1/21 0:58:52

C++并发编程入门 目录

STL 写法

#include <thread>
#include <iostream>
using namespace std;

void thread_fun(int arg)
{
    cout << "one STL thread " << arg << " !" << endl;
}

int main(void)
{
    int thread_count = 10;
    int id_array[10] = { 1,2,3,4,5,6,7,8,9,10 };

    std::thread thread_arr[10] = { };

    for (int i = 0; i < thread_count; i++)
    {
        thread_arr[i] = std::thread(thread_fun, id_array[i]);
    }

    for (int i = 0; i < thread_count; i++)
    {
        thread_arr[i].join();
    }

    return 0;
}

Windows 写法

#include <iostream>
#include <windows.h>
using namespace std;

DWORD WINAPI ThreadFun(LPVOID lpParamter)
{
    //转成整数地址,再对地址解引用取出整数
    cout << "one Windows thread "<< *(int*)lpParamter<<" !" << endl;
    return 0;
}

int main()
{
    int thread_count = 10;
    HANDLE handleArr[10] = {NULL};
    //给线程函数传递的数据,用来标记线程
    int data[10] = { 1,2,3,4,5,6,7,8,9,10 };
    for (int i = 0; i < 10; i++)
    {
        handleArr[i] = CreateThread(NULL, 0, ThreadFun, &data[i], 0, NULL);
    }

    //等待10个线程结束
    WaitForMultipleObjects(thread_count, handleArr, TRUE, INFINITE);

    for (int i = 0; i < thread_count; i++)
    {
        CloseHandle(handleArr[i]);
    }

    return 0;
}

一次执行结果


 

另一次执行结果

Linux 写法

#include <pthread.h>
#include <iostream>
using namespace std;

void* thread_fun(void *arg)
{
    cout << "one Linux thread "<< *(int*)arg<<" !" << endl;
    return 0;
}

int main(void)
{
    int thread_count = 10;
    int id_array[10] = { 1,2,3,4,5,6,7,8,9,10 };
    pthread_t thread_arr[10] = { 0 };

    for (int i = 0; i < thread_count; ++i)
    {
        pthread_create(&thread_arr[i], NULL, thread_fun, &id_array[i]);
    }

    //让线程运行直到结束
    for (int i = 0; i < thread_count; i++)
    {
        pthread_join(thread_arr[i], NULL);
    }

    return 0;
}

一次执行结果

另一次的执行结果

再一次执行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/966693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS踩坑: for let 和 for var的区别

最近踩了一个js的坑 踩坑代码 如下两段代码&#xff0c;看起来没什么区别&#xff0c;但是实际运行效果却不一样 for (let i 0; i < 10; i) {console.log("for:" i);setTimeout(() > {console.log("setTimeout:" i);}, 1000); }输出&#xff1…

个性化定制你的AI助手,AI指令提示词专家

『个性化定制你的AI助手』围观不如下场&#xff01;需要学习AI指令提升能力的&#xff0c;精准输出想要内容的&#xff0c;快来订阅 javastarboy『AI指令保姆级拆解』合集&#xff01; ▶️你是否尚未挖掘到 AI 的潜力&#xff1f; ▶️你是否经常遇到“答非所问”的“人工智障…

手撕二叉平衡树

今天给大家带来的是平衡树的代码实现&#xff0c;如下&#xff1a; #pragma once #include <iostream> #include <map> #include <set> #include <assert.h> #include <math.h> using namespace std; namespace cc {template<class K, clas…

重装系统全流程

重点&#xff1a; 下载镜像网址&#xff1a;下载 Windows 10 (microsoft.com) 不过不用下载&#xff0c;你的美均相U盘里面有下载好的Win10系统 重点注意&#xff0c;重启后拔优盘&#xff0c;安装时不要联网

sql:SQL优化知识点记录(九)

&#xff08;1&#xff09;小表驱动大表 对sql调优的分析&#xff1a; 排序优化&#xff1a; 数据库的连接方式&#xff0c;里面的数据尽量这样连接&#xff0c;尽量选择第一个方式&#xff0c;因为两个表的连接一共建立5次连接&#xff0c;第二个建立1000次连接&#xff0c;从…

谁该来负责拥塞控制

寻找一种 host 公平而非 packet 公平的方法&#xff0c;有趣的是&#xff0c;CSMA/CD 网络就体现了这种方法。 端到端拥塞控制算法(cca)准不准先不论&#xff0c;仅说让它们运行&#xff0c;被控制的流至少要持续 2 个 RTT&#xff0c;一条持续传输的流是多数 cca 的约束。持续…

12. 自动化项目实战

目录 1. 登录测试 2. 测试首页的帖子列表数不为0 3. 帖子详情页校验 4. 发布帖子 5. 退出登录 自动化项目实施的基本流程如下图所示&#xff1a; 手工测试用例、自动化测试用例。 1. 登录测试 校验登录后主页显示的用户名称和登录时输入的用户名是否相等。 public class…

牛客小白月赛77 D-小Why的密码锁 双哈希做法

这道题没卡自然溢出的哈希&#xff0c;但mod为1e9的哈希被卡了。 双哈希只需把单哈希做法中的lst和ans转换成 <PII&#xff0c; int>类型的即可。 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing nam…

使用Docker安装和部署kkFileView

&#x1f388;1 参考文档 kkFileView官方文档 &#x1f680;2 安装kkFileView 拉取Redis镜像。 docker pull keking/kkfileview启动docker容器。 docker run -it -d -p 8012:8012 keking/kkfileview --restart always解释&#xff1a; docker run redis # 从kkfileview镜像运行…

ArcGIS Pro实践技术应用、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

c语言每日一练(13)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;上学期间将看学业情况更新。 五道选择题&#xff1a; 1、程序运行的结果…

理解 std::thread::join

C多线程并发编程入门&#xff08;目录&#xff09; 本文用最简单易懂的实际案例&#xff0c;讲清楚了 join 的实际内涵&#xff0c;保证你过目不忘。 Hello join 示例 join 函数是我们接触C多线程 thread 遇到的第一个函数。 比如&#xff1a; int main() {thread t(f);t.…

苹果Mac系统如何优化流畅的运行?提高运行速度

Mac系统的稳定性和流畅性一直备受大家称赞&#xff0c;这也是大多数人选择Mac的原因&#xff0c;尽管如此&#xff0c;我们仍不时地对Mac进行优化、调整&#xff0c;以使其比以前更快、更流畅地运行。以下是小编分享给各位的Mac优化方法&#xff0c;记得保存哦~ 一、释放被过度…

linux深入理解多进程间通信(未完)

1.进程间通信 1.1 进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件…

MySQL总复习

目录 登录 显示数据库 创建数据库 删除数据库 使用数据库 创建表 添加数据表数据 查询表 添加数据表多条数据 查询表中某数据 增insert 删delete 改update 查select ​ where like ​编辑 范围查找 order by 聚合函数 count max min sum avg g…

创建2个线程并执行(STL/Windows/Linux)

C并发编程入门 目录 STL 写法 #include <thread> #include <iostream> using namespace std;void thread_fun1(void) {cout << "one STL thread 1!" << endl; }void thread_fun2(void) {cout << "one STL thread 2!" <…

ip地址、LINUX、与虚拟机

子网掩码&#xff0c;是用来固定网络号的&#xff0c;例如255&#xff0c;255,255,0&#xff0c;表明前面三段必须为网络号&#xff0c;后面必须是主机号&#xff0c;那么怎么实现网络复用呢&#xff0c;例如使用c类地址&#xff0c;但是正常子网掩码是255&#xff0c;255,255,…

抽象轻松的C语言

#include <stdio.h> /* 预处理指令*/ /* 函数 */ int main() {int log 3.14;printf("hello word * %d\n easy", log);getchar();/* 获取键盘输入的字母&#xff0c;在这个程序中的作用是防止程序瞬间关闭 */return 0; } 上一篇说过&#xff0c;C程序是C语言的…

linux系统中串口驱动框架基本分析(经典)

第一&#xff1a;区分不同的终端类型 串行端口终端&#xff08;/dev/ttySn&#xff09; 串行端口终端&#xff08;Serial Port Terminal&#xff09;是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。 有段时间这些串行端口设备通常被称为终…

CXL寄存器介绍(2)- CXL DVSEC

&#x1f525;点击查看精选 CXL 系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0c…