龙华新区网站建设,wordpress如何修改字体大小,快速排名工具免费,网站开发 简历实验三四3._实验三#xff1a;Linux进程/线程的异步并发执行3.1_fork()函数创建子进程3.2_创建线程pthread_create();4._实验四#xff1a;使用信号量进行互斥与同步4.1_信号量初使用#xff08;1#xff09;信号量简单介绍#xff08;2#xff09;信号量以及P、V操作的使…
实验三四3._实验三Linux进程/线程的异步并发执行3.1_fork()函数创建子进程3.2_创建线程pthread_create();4._实验四使用信号量进行互斥与同步4.1_信号量初使用1信号量简单介绍2信号量以及P、V操作的使用方法2利用信号量实现同步互斥3._实验三Linux进程/线程的异步并发执行
3.1_fork()函数创建子进程
fork()函数用法解释 个人观点
#include unistd.h
#include stdio.h
int main ()
{ pid_t fpid; //fpid表示fork函数返回的值 int count0; fpidfork(); if (fpid 0) printf(error in fork!); else if (fpid 0) { printf(i am the child process, my process id is %d/n,getpid()); printf(我是爹的儿子/n);//对某些人来说中文看着更直白。 count; } else { printf(i am the parent process, my process id is %d/n,getpid()); printf(我是孩子他爹/n); count; } printf(统计结果是: %d/n,count); return 0;
} 当执行到代码段fpidfork(); 时此时新建了一个子进程其直观图如下 练习 画出流程图
#include unistd.h
#include stdio.h
int main(){pid_t son_pid,daughter_pid;int count 1;son_pid fork();if(son_pid 0){count;printf(i am son,count %d\n,count);}else{daughter_pid fork();if(daughter_pid 0){count;printf(i am daughter, count %d\n,count);}else{count;printf(i am father,ID %d, count %d\n,daughter_pid,count);waitpid(son_pid,NULL,0);waitpid(daughter_pid,NULL,0);}}
}3.2_创建线程
pthread.h的使用
pthread_create(); 创建两个线程即函数son()和函数daughter();两者执行顺序随机且同步
4._实验四使用信号量进行互斥与同步
4.1_信号量初使用
1信号量简单介绍
Linux提供两种信号量 内核信号量用于内核中资源共享控制 用户态信号量主要包括POSIX信号量和SYSTEM V信号量。其中POSIX信号量分为两类。 无名信号量主要用于线程间同步也可用于进程间由fork产生同步。 有名信号量既可用于进程间同步也可用于线程间同步。
2信号量以及P、V操作的使用方法
POSIX有名信号量主要包括
sem_t* sem_open(const char *name, int oflag, mode_t mode, int value);
//例如创建一个互斥信号量mutex,初值为1即mutex 1访问权限为0666我也不知道啥意思
//如信号量存在则打开之如不存在则创建
sem_t* mutex(mutex,O_CREATE,0666,1);①name: 文件名路径如’mysem’会创建/dev/shm/sem.mysem ②oflagO_CREATE或O_CREATE | O_EXCL O_CREATE如信号量存在则打开之如不存在则创建 O_CREATE | O_EXCL如信号量已存在则返回error ③mode信号量访问权限如0666 ④value信号量初始化值
int sem_wait(sem_t *sem)测试指定的信号量的值相当于P操作 若sem 0则减1立刻返回 若sem 0则睡眠直到sem 0此时立刻减1然后返回
int sem_post(sem_t *sem)释放资源相当于V操作信号量sem的值加1唤醒正在等待该信号量的进程/线程
int sem_close(sem_t *sem)关闭有名信号量 进程中如果使用完信号量应使用该函数关闭有名信号量
int sem_unlink(const char *name)删除系统中的信号量
2利用信号量实现同步互斥