第三章 进程
- 3.1 进程概念 - 3.1.1 进程
- 3.1.2 进程状态
- 3.1.3 进程控制块
- 3.1.4 线程
 
- 3.2 进程调度 - 3.2.1 调度队列
- 3.2.2 调度程序
- 3.2.3 上下文切换
 
- 3.3 进程操作 - 3.3.1 进程创建
- 3.3.2 进程终止
 
- 3.4 进程间通信 - 3.4.1 共享内存系统
- 3.4.2 消息传递系统
 
- 3.5 IPC系统的实例 - 3.5.1 实例:POSIX 共享内存
- 3.5.2 实例:Mach
- 3.5.3 实例:Windows XP
 
- 3.6 客户机-服务器系统通信 - 3.6.1 Socket
- 3.6.2 远程过程调用
- 3.6.3 远程方法调用
 
- 课后习题 - 3.1
- 3.2
- 3.3
- 3.4
- 3.5
- 3.6
 
// 第一次编写多线程程序,激动。。。
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
void f(int x) {
    if (x == 1) {
        printf("0");
        return;
    } else if (x == 2) {
        printf("0 1");
        return;
    } else {
        int *a = (int*)malloc(sizeof(x));
        0[a] = 0;
        1[a] = 1;
        for (int i=2; i<x; ++i) {
            i[a] = a[i-1] + a[i-1];
        }
        for (int i=0; i<x; ++i) {
            printf("%d ", i[a]);
        }
        free(a);
    }
}
int main() {
    pid_t  pid = fork();
    if (pid < 0) {
        exit(-1);
    } else if (pid == 0) {
        int x;
        scanf("%d", &x);
        if (x <= 0) {
            fprintf(stderr, "f");
        }
        f(x);
        exit(1);
    } else {
        wait(nullptr);
        printf("ok");
        exit(1);
    }
}- 3.10 - #include <stdio.h> #include <sys/shm.h> #include <sys/stat.h> #include <unistd.h> #include <stdlib.h> { // 这个括号只是为了隔一行,kan const int MAX_SEQUENCE = 10; typedef struct { int fib_sequence [MAX_SEQUENCE]; int sequence_size; }shared_data; } int main() { pid_t pid; int segment_id; shared_data *sd; int x; scanf("%d", &x); if (x > MAX_SEQUENCE) { fprintf(stderr, "x is error"); exit(-1); } else { // 创建共享内存块 segment_id = shmget(IPC_PRIVATE, sizeof(shared_data), S_IRUSR | S_IWUSR); // 将sd 指向共享内存块基址 sd = (shared_data *) shmat(segment_id, nullptr, 0); sd->sequence_size = x; // 创建 子进程 pid = fork(); if (pid < 0) { fprintf(stderr, "fork fail"); exit(-1); } else if (pid == 0) { // 子进程 写入数据 printf("size = %d\n", sd->sequence_size); if (sd->sequence_size == 1) { sd->fib_sequence[0] = 0; } else if (sd->sequence_size == 2) { sd->fib_sequence[0] = 0; sd->fib_sequence[1] = 1; } else { sd->fib_sequence[0] = 0; sd->fib_sequence[1] = 1; for (int i=2; i<sd->sequence_size; ++i) { sd->fib_sequence[i] = sd->fib_sequence[i-1] + sd->fib_sequence[i-2]; } } exit(1); } else { wait(nullptr); // 主进程读数据 for (int i=0; i<x; ++i) { printf("%d ", sd->fib_sequence[i]); } } shmdt(sd); // 销毁 shmctl(segment_id, IPC_RMID, nullptr); } return 0; }
##*后续还在更新中。。。。。。*

 京公网安备 11010502036488号
京公网安备 11010502036488号