OSLab多线程

Posted sinkinben

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OSLab多线程相关的知识,希望对你有一定的参考价值。

?

日期:2019/3/26

内容:多线程。

一、基本知识

  • 线程的定义

    线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

    (待补充)

  • 并发特性

    当前的进程可以理解为一个主线程,新建的进程称为工作线程。主线程与工作线程交织并发执行。(见2.1的代码实例)

  • 使用线程时,需要链接pthread库

gcc f.c -o f -lpthread

?

二、线程的系统调用

2.1 创建线程(pthread_create)

  • 原型:int pthread_create(pthread_t *tid, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
  • 功能:

    >>创建一个线程

    >>新线程从start_routine开始执行

    >>新线程的ID保存在tid指向的位置

  • 返回值:成功0,失败非0。(实际是返回-1,但是习惯上使用!=0判断更好)
  • 参数解析

参数

功能

tid

该参数是一个指针, 新线程的ID保存在tid指向的位置

attr

线程属性。如果为空,则使用缺省的属性值

start_routine

该参数是一个函数指针, 新线程从start_routine开始执行

arg

提供给start_routine的参数

  • attr解析(需要用时补充)
  • arg解析

    >>对于整型变量

int ivalue = 123;

void *arg = (void *) ivalue;

>>字符串(如下代码实例)

>>结构体

struct person {

char *name;

int age;

} p;

void *arg = (void *) &p;

  • 并发代码实例

void *thread_run(void *args)

{

????int i = 5;

????const char *str = (const char *)(args);

????while(i--)

????{

????????printf("%s running...\\n", str);

????????sleep(1);

????}

????return NULL;

}

?

int main()

{

????pthread_t ptid;

????pthread_create(&ptid, NULL, &thread_run, "subthread");

?

????int i = 5;

????while(i--)

????{

????????puts("main thread running...");

????????sleep(1);

????}

????return 0;

}

技术图片

以上是关于OSLab多线程的主要内容,如果未能解决你的问题,请参考以下文章

并发编程之多线程

什么是多线程,多进程?

多线程和多进程模式有啥区别

多线程Java多线程学习笔记 | 多线程基础知识

java中啥叫做线程?啥叫多线程?多线程的特点是啥

c++ 多线程与c多线程有啥区别?