尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

多线程代码解释 + linux内核多线程

多线程代码解释 + linux内核多线程 多线程编程核心就这3个函数pthread_create()- 创建线程pthread_join()- 等待线程pthread_mutex_lock/unlock()- 保护共享数据1.单线程thd编译线程需要加上 -lpthread2.多线程往线程中传参数3.线程加锁解锁lock unlocktime thd1 命令可以查看代码的效率4.false sharing假共享两个线程访问不同的变量但因为这些变量在内存中挨得太近同一个缓存行导致CPU误以为它们在共享数据从而频繁地互相通知拖慢性能。5.友元友元Friend是 C 中一种突破封装性的机制。它允许一个外部函数或另一个类访问某个类的private私有和protected保护成员friend void printPoint(const Point p);linux内核多线程linux内核可以看作一个服务进程。内核线程的调度由内核负责 内核线程只运行在内核态和普通线程一样可以被调度也可以被抢占。进程(线程)描述符在Linux中每一个进程都由 task_struct 数据结构来定义。task_struct 就是我们通常所说的 PCB。为了描述控制进程的运行系统中存放进程的管理和控制信息的数据结构称为进程控制块 PCBProcess Control Block它是进程实体的一部分是操作系统中最重要的记录性数据结构。它是进程管理和控制的最重要的数据结构每一个进程均有一个 PCB在创建进程时建立 PCB伴随进程运行的全过程直到进程撤消而撤消。PCB 记录了操作系统所需的用于描述进程的当前情况以及控制进程运行的全部信息如打开的文件、挂起的信号、进程状态、地址空间等等。内核线程函数// 创建线程但不启动线程函数struct task_struct *kthread_create(int (*threadfn)(void *data), void *data, const char *namefmt, ...);// 创建线程并启动线程函数struct task_struct *kthread_run(int (*threadfn)(void *data), void *data, const char *namefmt, ...)// 结束线程intkthread_stop(structtask_struct *k);// 返回kthread_stop标志intkthread_should_stop(void);内核同步机制互斥锁struct mutex mutex; // 定义mutex_init(mutex); // 初始化mutex_lock(mutex); // 获取互斥锁mutex_unlock(mutex); // 释放互斥锁
返回列表