
操作系统
文章平均质量分 65
三つ叶
这个作者很懒,什么都没留下…
展开
-
多线程编程——pthread
1 创建线程1.1 原型#include <pthread.h>int pthread_create(pthread_t *tid, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);1.2 功能创建一个线程新线程从start_routine开始执行新线程的ID保存在tid指向的位置1.3 参数参数功能tid该参数是一个指针, 新线程的ID保存在tid指向的位置att原创 2021-05-30 13:39:32 · 1772 阅读 · 0 评论 -
strtok
一、strtok的函数原型#include <string.h>char *strtok(char *str, const char *delim);• 功能–字符串 str 由多个单词构成–单词之间由分割符 delim 隔开–strtok 将字符串切分为多个单词二、功能• 输入字符串 –“abc:123:xyz”• 分隔符 –“:”• 分割成多个单词 –“abc” –“123” –“xyz”三、使用char string[] = "abc:123:xyz"原创 2021-05-22 09:01:43 · 261 阅读 · 0 评论 -
操作系统——信号量的应用
生产者和消费者有问题,一:存在忙等 二:多个生产者之间会存在问题对生产者来说,==“资源”==是什么?–空盒子数–定义信号量empty,初始为n–每次放入一个新产品时,需要wait(empty)对消费者来说,==“资源”==是什么?–产品数–定义信号量 full,初始为0–每次消耗一个产品时,需要wait(full)生产者和消费者还需要做什么操作?–生产者需要signal full–消费者需要signal empty当有多个生产者时,对buffer[in]=item, sign原创 2021-05-21 20:49:34 · 544 阅读 · 0 评论 -
操作系统——实现多个进程之间同步(Peterson改进以及面包店算法)
(1)改进Peterson算法存在三个进程时,当三个进程都在执行,那么像之前所讲的Peterson仅仅将自己阻塞的方式就不太好使,起码要阻塞两个,所以单单使用turn那样非此即彼的方式难以实现。为此,我们尝试如下的实现方式。Filter算法// initializationwaiting[N-1] = { -1 }; // the waiting process of each level 0…N-2level[N] = { -1 }; // current level of proces原创 2021-05-15 18:10:20 · 1670 阅读 · 0 评论 -
操作系统——进程同步
临界区问题的解决方案:Peterson方法硬件同步信号量Peterson方法这个方法靠turn=i/j控制会有一个进程阻塞在while(死循环),靠flag[i/j]=false解除死循环首先,如果是进程i第一次开始执行,那它可以顺利进入临界区,因为flag[j]=FALSE,进程j还不想进入临界区!而如果进程P0和P1并发,那么两者中必然会有一个会被while堵塞住(因为flag[0和1]均等于true)因为turn要么i要么j,而turn为j则process_i死循环,反之,proc原创 2021-05-10 17:21:18 · 163 阅读 · 0 评论 -
操作系统——线程
文章目录线程引入线程用户级线程线程的调度线程间的通信线程崩溃的问题线程阻塞的问题线程引入网页服务器的例子多进程版本: while(true){ conn=accept(); 创建一个新的进程执行 serve(conn);}当服务器接收到用户请求后,会创建子进程去处理用户请求,但在本例中为此而创建一个新进程是有如下缺点的:空间资源:新的进程需要PCB、地址空间(页表资源)等时间资源:创建进程本身消耗时间;进程之间传递数据需要内核介入(进程通信机制)注原创 2021-04-26 18:53:52 · 184 阅读 · 0 评论