IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言学习之:并发编程(多线程编程)资源整理 pthread -> 正文阅读

[C++知识库]C语言学习之:并发编程(多线程编程)资源整理 pthread

  • 先挖个坑,改天再填充细节。。。。。

如何解决 VS 中的 pthread.h 头文件问题

https://blog.csdn.net/qq_35292447/article/details/103541936

线程的创建

代码范例

/*************************************
Demo for pthread commands
compile: gcc threadX.c -o threadX -lpthread
***************************************/
#include <pthread.h>
#include <stdio.h>
void* say_hello(void* param); /* the work_function */
int main(int args, char** argv) {
	pthread_t tid; /* thread identifier */
	/* create the thread */
	pthread_create(&tid, NULL, say_hello, NULL);
	/* wait for thread to exit */
	pthread_join(tid, NULL);
	printf("Hello from first thread\n");
	return 0;
}
void* say_hello(void* param) {
	printf("Hello from second thread\n");
	return NULL;
}

参考资源

https://zhuanlan.zhihu.com/p/97418361

互斥锁

代码范例

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define ITERATIONS 1000000
void* runner(void* param); /* thread doing the work */
int count = 0;
pthread_mutex_t lock;
int main(int argc, char** argv) {
	pthread_t tid1, tid2;
	if (pthread_mutex_init(&lock, NULL) != 0) {
		printf("mutex init failed\n");
		exit(1);
	}
	if (pthread_create(&tid1, NULL, runner, NULL)) {
		printf("Error creating thread 1\n");
		exit(1);
	}
	if (pthread_create(&tid2, NULL, runner, NULL)) {
		printf("Error creating thread 2\n");
		exit(1);
	}
	/* wait for the threads to finish */
	if (pthread_join(tid1, NULL)) {
		printf("Error joining thread\n");
		exit(1);
	}
	if (pthread_join(tid2, NULL)) {
		printf("Error joining thread\n");
		exit(1);
	}
	if (count != 2 * ITERATIONS)
		printf("** ERROR ** count is [%d], should be %d\n", count, 2 * ITERATIONS);
	else
		printf("OK! count is [%d]\n", count);
	pthread_exit(NULL);
	pthread_mutex_destroy(&lock);
	return 0;
}

/* thread doing the work */
void* runner(void* param) {
	int i, temp;
	for (i = 0; i < ITERATIONS; i++) {
		temp = count; /* copy the global count locally */
		temp = temp + 1; /* increment the local copy */
		count = temp; /* store the local value into the global count */
	}
	return NULL;
}

参考资源

https://zhuanlan.zhihu.com/p/97512154

信号量

https://zhuanlan.zhihu.com/p/98717838

线程池

https://zhuanlan.zhihu.com/p/141615042

进程的创建

代码范例

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char** argv) {
	pid_t root = getpid();
	// when forking, program does not start again since memory/register values are exactly the same
	// i.e. instruction pointer is at the same line too. So fork() wont execute again.
	pid_t pid = fork();
	printf("from %d forking into %d\n", root, pid);
	sleep(20);
	// watch 2 different PIDs spawn 2 more child processes.
	pid_t mypid = getpid();
	pid = fork();
	printf("from %d forking into %d\n", mypid, pid);
	sleep(20);
	if (getpid() == root) {
		sleep(20);
		printf("root exiting\n");
	}
	else {
		printf("Child -- PID %d exiting\n", getpid());
	}
	return 0;
}
#include<unistd.h>
int main(int argc, char** argv) {
	return execv("/usr/bin/ls", argv);
}

建立管道

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
	int fd[2], nbytes;
	pid_t childpid;
	char string[] = "Hello, world!\n";
	char readbuffer[80];
	pipe(fd);
	if ((childpid = fork()) == -1) {
		perror("fork");
		exit(1);
	}
	if (childpid == 0) {
		/* Child process closes up input side of pipe */
		close(fd[0]);
		/* Send "string" through the output side of pipe */
		write(fd[1], string, (strlen(string) + 1));
		exit(0);
	}
	else {
		/* Parent process closes up output side of pipe */
		close(fd[1]);
		/* Read in a string from the pipe */
		nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
		printf("Received string: %s", readbuffer);
	}
	return (0);
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:04:24  更:2022-03-16 22:06:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:38:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码