操作系统头歌实验二 进程(线程)同步或死锁1、2

题目描述:

操作系统为进程提供了必要的隔离,使得进程内部获得“封闭”的“可再现”执行环境。但是也有很多场合需要进程间交互、协作完成任务,这就需要进程间通信手段以及同步手段。通信手段用于进程间的数据交换,而同步手段用于控制各自的执行步伐形成前后因果或互斥的执行关系。本次实训,同学们将观察和感受Linux提供的各种进程间通信手段。

第一关:创建共享内存

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define BUFSZ 4096
int main(int argc, char* argv[])
{
	//*****************Begin***********************
	key_t key=ftok("keyfile",0);
	shmget(key,BUFSZ,IPC_CREAT);
	//*****************End*************************
	system("ipcs -m >temp");  //执行ipcs -m 命令,显示系统的共享内存信息,此句不可以删除。
	return 0;
	

}

第二关:读写共享内存

read.c

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main( int argc, char* argv[])
{
	int shm_id;
	char* shm_buf;
	
	if (argc != 2) {
		printf("USAGE:atshm <identifier>\n");
		exit(1);
	}

	shm_id = atoi(argv[1]);
	//--------------Begin--------------
	void *s=shmat(shm_id,0,0);
	system("ipcs -m > read_attach");
	printf("%s\n",(char*)s);
	shmdt(s);

	system("ipcs -m >read_detach");
	//---------------End----------------
	exit(0);

}

write.c

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{
	int shm_id;
	char* shm_buf;
	if (argc != 2) {
		printf("USAGE:atshm <identifier>");
		exit(1);
	}
	shm_id = atoi(argv[1]);
	//----------------Begin------------------
	void *s=shmat(shm_id,0,0);
	system("ipcs -m >write_attach");//将当前进程和共享内存建立映射之后,执行该代码;不可删除
	char *t="Hello shared memory!";
	memcpy(s,t,strlen(t)+1);
	shmdt(s);
	system("ipcs -m >write_detach");//将当前进程和共享内存解除映射之后,执行该代码;不可删除
	//--------------End-----------------------
	
	
	exit(0);

}

第三关:POSIX信号量的使用

#include <semaphore.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

int main(int argc, char** argv)
{
	//--------------Begin---------------
	sem_t *s;
	s=sem_open("semfile",O_CREAT,0666,1);
	//--------------End-----------------
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 进程进程是计算机中正在运行的程序的实例。它是操作系统进行资源分配和调度的基本单位,拥有独立的内存空间和执行环境。 2. 线程线程进程中的一个执行单元,是程序执行的最小单位。一个进程可以包含多个线程,它们共享进程的资源,但每个线程有自己的执行路径。 3. 状态:线程进程都有不同的状态,常见的有以下几种: - 就绪状态:线程已经创建,但还没有开始执行。 - 运行状态:线程正在执行。 - 阻塞状态:线程暂时停止执行,等待某个条件满足后再继续执行。 - 终止状态:线程执行完毕或者出现异常而终止。 4. 阻塞:阻塞是指线程暂时停止执行,等待某个条件满足后再继续执行。常见的阻塞情况包括等待输入/输出完成、等待锁、等待其他线程完成等。 5. 优先级:线程的优先级决定了线程在竞争CPU资源时的优先级别。优先级高的线程会更有可能被调度执行,但并不保证一定会被执行。 6. 同步同步是指多个线程之间按照一定的顺序执行,以避免出现数据不一致或者并发访问共享资源的问题。常见的同步机制包括使用锁、信号量、条件变量等。 7. 死锁死锁是指两个或多个线程互相持有对方需要的资源,导致它们都无法继续执行的状态。这种情况下,线程会一直等待对方释放资源,从而陷入无限等待的状态。 8. 守护:守护线程是一种特殊的线程,它的生命周期与进程的生命周期相关联。当所有的非守护线程结束时,守护线程也会自动结束。守护线程通常用于执行一些后台任务,如垃圾回收等。 9. 线程安全:线程安全是指多个线程同时访问某个共享资源时,不会出现数据不一致或者并发访问的问题。为了实现线程安全,可以使用同步机制或者使用线程安全的数据结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stearm210

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值