美文网首页
OS Experiment-03

OS Experiment-03

作者: SnorlaxSE | 来源:发表于2017-11-24 18:20 被阅读0次
  • 同步
    • 两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。例:Mac端与手机端微信消息同步
    • 同步在大多数情况下,是在实现了互斥的情况下,通过其他机制实现对共享资源的有序访问。极少数情况下可以多个访问者同时访问同一资源。
  • 互斥
    • 对一组并发进程,一次只有一个进程能够访问一个给定的资源或执行一个给定的功能。
    • 互斥技术可以用于解决诸如资源争用之类的冲突,还可以用于进程间的同步,使得它们可以合作。典型例子便是生产者/消费者模型。
    • 互斥是指同一资源在同一时刻只允许一个访问者访问。
  • 注意事项:

    • 在编译中要加 -lpthread参数, 如:gcc thread.c -o thread –lpthread
      • pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以使用库函数时,需要链接该库。
    • 使用这些函数时,不要忘记加头文件#include<pthread.h>
    • 如果使用sleep(),getpid()等函数时,需要加头文件#include<unistd.h>
  • Peterson算法特点

    • 使用两个全局变量(flg[]和turn)
      • Flg[]表示哪个进程正在占用临界区及临界区的状态
      • Turn表示能进入临界区的进程序号
    • 此算法涉及两个原则:
      • 忙则等待
      • 空闲让进
  • 临界缓冲区问题

    • 有一个或者多个生产者产生某种类型的数据(记录、字符),并放置在缓冲区中;有一个消费者从缓冲区中取数据,每次取一项;系统保证避免对缓冲区的重复操作,也就是说,在任何时候只有一个代理(生产者或者消费者)可以访问缓冲区。
  • int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)

    • 作用:互斥的条件等待,阻塞线程
    • 参数:*cond是指向一个条件变量的指针
      *mutex则是对相关的互斥锁的指针
  • int pthread_cond_signal(pthread_cond_t *cond)

    • 作用:发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行
    • 参数:*cond是指向一个条件变量的指针
void *producer()
{
        pthread_mutex_lock(&the_mutex);  //加锁
        while(buff != 0)
        {
            pthread_cond_wait(&condP, &the_mutex);   //阻塞等待      
        }
        buff = i; //生产产品
        pthread_cond_signal(&condC);     //通知消费者消费产品
        pthread_mutex_unlock(&the_mutex);   
 }
 void *consumer(void *ptr)
{
        pthread_mutex_lock(&the_mutex);
        while(buff == 0)
        {
            pthread_cond_wait(&condC, &the_mutex);  //阻塞等待       
        }
        buff = 0;  //清空缓冲区
        pthread_cond_signal(&condP);     //通知生产者生产产品
        pthread_mutex_unlock(&the_mutex);
}

相关文章

网友评论

      本文标题:OS Experiment-03

      本文链接:https://www.haomeiwen.com/subject/djrqmxtx.html