linux 和 ecos 内核线程创建/信号量/event等对比

ecos:

 1 int gx_thread_create (const char *thread_name, gx_thread_id *thread_id,
 2         void(*entry_func)(void *), void *arg,
 3         void *stack_base,
 4         unsigned int stack_size,
 5         unsigned int priority,
 6         gx_thread_info *thread_info)
 7 {
 8 #define GX_THREAD_PRIORITY_MAX  255
 9
10     if (priority > GX_THREAD_PRIORITY_MAX || thread_id == NULL 11             || entry_func == NULL || thread_name == NULL 12             || stack_base == NULL || thread_info == NULL)
13         return -1;
14
15     cyg_thread_create_ex((cyg_addrword_t)priority, (cyg_thread_entry_t *)entry_func, (cyg_addrword_t)arg,
16             (char *)thread_name, stack_base, (cyg_ucount32)stack_size, thread_id, thread_info, 0);
17
18     cyg_thread_resume(*thread_id);
19
20     return 0;
21 }

linux:

 1 int gx_thread_create (const char *thread_name, gx_thread_id *thread_id,
 2         void(*entry_func)(void *), void *arg,
 3         void *stack_base,
 4         unsigned int stack_size,
 5         unsigned int priority,
 6         gx_thread_info *thread_info)
 7 {
 8     struct task_struct *task = NULL;
 9
10     task = kthread_create((int (*)(void *))entry_func, arg, "%s",thread_name);
11     if(task == NULL)
12         return -1;
13
14     GXAV_DBG("%s(),task : %p\n",__func__,task);
15
16     *thread_id = (unsigned int)task;
17
18     GXAV_DBG("%s(),thread_id : 0x%x\n",__func__,*thread_id);
19
20     wake_up_process(task);
21
22     return 0;
23 }

aa

时间: 2024-08-08 11:59:42

linux 和 ecos 内核线程创建/信号量/event等对比的相关文章

linux系统编程:线程同步-信号量(semaphore)

线程同步-信号量(semaphore) 生产者与消费者问题再思考 在实际生活中,只要有商品,消费者就可以消费,这没问题.但生产者的生产并不是无限的,例如,仓库是有限的,原材料是有限的,生产指标受消费指标限制等等.为了进一步,解决好生产者与消费者问题,引入信号量进机制. 信号量 信号量(semaphore)是互斥量的升级版:互斥量的状态为0或1,而信号量可以为n.也就是说,使用互斥量时,最多允许一个线程进入关键区,而信号量允许多个,具体值是信号量当前的内部值. 相关函数 sem_t //信号量类型

Linux下的进程类别(内核线程、轻量级进程和用户进程)以及其创建方式--Linux进程的管理与调度(四)

本文声明 日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的创建 本文中出现的,内核线程,轻量级进程,用户进程,用户线程等概念,如果不太熟悉, 可以参见 内核线程.轻量级进程.用户线程三种线程概念解惑(线程≠轻量级进程) Linux进程类别 虽然我们在区分Linux进程类别, 但是我还是想说Linux下只有一种类型的进程,那就是task_str

linux内核线程的创建与销毁

linux将创建内核线程的工作交给了一个专门的内核线程kthreadd来完成,该线程会检查全局链表kthread_create_list,如果为NULL,就会调schedule()放弃cpu进入睡眠状态,否则就取下该链表中的一项创建对应的线程.本文就从khtreadd内核线程的创建开始来展示一下内核线程的创建过程.1 kthreaddlinux2.6.30,创建内核线程是通过kethradd内核守护线程来完成的,虽然机制上有所变化,但是最终还是调用do_fork来完成线程的创建.Kthreadd

Linux学习笔记之内核线程

本文旨在简单介绍一下Linux内核线程: 先举个例子: 不插U盘,在Linux命令行中输入:ps -el:然后插上U盘,再次输入:ps -el 会发现多出了下面一行(当然还会有其他的,比如scsi相关的): 1 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 2 1 S 0 2749 2 0 80 0 - 0 - ? 00:00:00 usb-storage usb-storage 就是U盘驱动程序(驱动程序是动态加载的)起来之后,由内核

内核线程和进程的区别

http://blog.csdn.net/tigerjibo/article/details/8299686 前言: 从 内核的角度来说,它并没有线程这个概念.Linux把所有线程都当做进程来实现.内核并没有准备特别的调度算法或者定义特别的数据结构来表示线程.相反, 线程仅仅被视为一个与其他进程共享某些资源的进程.每个线程都拥有唯一属于自己的task_struct,所以在内核中,它看起来就像是一个普通的进程 (只是该进程和其他一些进程共享某些资源,如地址空间) 一.内核线程 1.内核经常需要在后

linux内核中的线程创建接口

介绍一些内核给我们提供的用于在内核中创建线程的内核接口函数. 其实在linux内核中,无论是进程还是线程,都是用struct task_struct结构体来表示的. 用于创建一个内核线程的函数: struct task_struct * kthread_create( int (*threadfn)(void *data),                                           void *data,                                 

linux进程的地址空间,核心栈,用户栈,内核线程

linux进程的地址空间,核心栈,用户栈,内核线程 地址空间: 32位linux系统上,进程的地址空间为4G,包括1G的内核地址空间,和3G的用户地址空间. 内核栈: 进程控制块task_struct中保存了2个page大小的信息. 为什么每一个进程都是用各自的内核栈呢? 引用(http://hi.baidu.com/iruler/blog/item/0c3363f377ccc5c90a46e023.html)“ 假设某个进程通过系统调用运行在内核态(使用这个全局内核堆栈),此时如果被抢占,发生

Linux内核线程kernel thread详解--Linux进程的管理与调度(十)

日期 内核版本 架构 作者 GitHub CSDN 2016-06-02 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的描述 内核线程 为什么需要内核线程 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求). 内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的. 内核线程就是内核的分身,一个分身可以处理一件特定事情.内核线程的调度由内核负责,一个内核线程处于阻

[笔记]linux下和windows下的 创建线程函数

linux下和windows下的 创建线程函数 1 #ifdef __GNUC__ 2 //Linux 3 #include <pthread.h> 4 #define CreateThreadEx(tid,threadFun,args) pthread_create(tid, 0, threadFun, args) 5 #define CloseHandle(ph) 6 7 int pthread_create( 8 //指向线程标识符的指针. 9 pthread_t *restrict t