📅  最后修改于: 2023-12-03 14:54:49.182000             🧑  作者: Mango
本题涉及操作系统中的进程同步问题,需要程序员了解操作系统中进程同步的相关概念和技术。
进程是程序执行过程中分配和管理资源的最小单位。每个进程都拥有自己的地址空间,包括代码段、数据段、堆栈等,可以独立地执行、中止或挂起。进程之间可以互相通信、协作,但同时也会产生竞争和冲突。
同步是指不同进程或线程之间为了完成某个任务而需要彼此协作,以实现相互合作的行为。进程同步就是为了避免进程之间的竞争和冲突而采取的一系列措施。
常用的进程同步方式包括互斥锁、信号量、条件变量等。
以下是使用互斥锁实现进程同步的示例代码:
#include <pthread.h>
#include <stdio.h>
pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER;
void *mythread(void *arg)
{
pthread_mutex_lock(&mymutex); // 获取互斥锁
printf("Thread %d in critical section\n", arg);
pthread_mutex_unlock(&mymutex); // 释放互斥锁
return NULL;
}
int main()
{
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, mythread, (void *) 1);
pthread_create(&tid2, NULL, mythread, (void *) 2);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
在上述代码中,两个线程都会访问临界区(即 printf 函数),但是由于使用了互斥锁进行同步,因此只有一个线程能够进入临界区执行,另一个线程需要等待前一个线程释放互斥锁后才能进入临界区。