thread_block()用于将current_thread 终止变成blocked状态,不能跑,只有在调用thread_unblock()后进入就绪队列。
thread_yield()用于直接把current_thread进入就绪队列,在任意时刻可再次被调用。
list_entry返回一个线程。
idle_thread平常是不在ready_list中的。
1.在thread_start()即系统刚开始时,idle_thread在ready_list中。
2.在ready_list为空时,调用idle_thread。
idle() 在thread_start调用
{
1.把初始化为0的信号量设为1,即将idle_thread放入就绪队列。
2.把idle_thread的状态设为blocked。
}
running_thread()返回一个running thread
thread_current()是加上一个check的running_thread
init_thread()
{
1.初始化thread
2.状态设为blocked
3.把栈的空间变小
4.magic值
5.放入all_list
}
next_thread_to_run()
{
是否就绪队列为空?返回idle_thread:返回就绪队列的第一个,并移除
}
thread_schedule_tail(prev)
{
current_thread的thread_tick清0
激活process
如果prev已经dying,则销毁。
}
schedule()
{
调用这个的函数是thread_block,thread_exit,thread_yield.因为前提是current_thread状态不能是running。
}
总结来看,thread对外有一些接口
1.thread_create()
2.thread_block();
3.thread_unblock()
4.thread_name()
5.thread_current()
6.thread_yield()
7.thread_set_priority()
8.next_thread_to_run()
分享到:
相关推荐
windows 代码 thread.c 源代码
多线程编程代码,详细看http://blog.csdn.net/mybelief321/article/details/9377379
service_thread.c
- Keil MDK是Arm公司出品的微控制器开发工具套件,支持C/C++编程,具有强大的调试功能,广泛用于ARM架构的嵌入式开发。 - "RealThread.RT-Thread.3.1.5.pack"是RT-Thread针对Keil MDK的软件包,便于开发者快速集成...
`thread_create.c`、`thread_join.c`等源代码文件提供实际的编程示例,展示了如何在C语言中创建、管理线程。通过阅读和理解这些代码,开发者可以更好地理解和应用多线程技术。 总结,本主题涵盖了线程创建、等待、...
其中args_cmd.h是解析命令相关的头文件,ctrl.c和ctrl.h是控制命令的源代码,proc_cmd.c是具体操作的源代码,thread.c和thread.h是线程相关的源代码,types.h是类型相关的源代码,net_send.h是网络相关的源代码。...
async-thread.c很可能是实现异步线程功能的C语言源代码,包含函数定义、事件处理和线程交互逻辑。而async-thread.h则可能包含了对外部程序的接口声明,定义了相关函数原型、数据结构和常量,以便其他模块能够正确地...
sleep_thread.rar sleep_thread.rar sleep_thread.rarsleep_thread.rar sleep_thread.rar sleep_thread.rar sleep_thread.rar
6. **代码组织**:在"com_thread.c"文件中,我们期望看到的是一个结构化的程序,可能包含初始化串口、创建并运行发送数据的线程、等待线程完成以及清理资源等步骤。良好的代码组织有助于代码的可读性和可维护性。 7...
C标准库源代码,能提高对C的理解,不错的哦 下载文件列表 Pack : clibsource.rar C 标准库源代码\ABORT.C C标准库源代码\ABS.C C标准库源代码\ACCESS.C C标准库源代码\ADJUSTFD.C C标准库源代码\ALGRITHM C标准库源...
它主要应用于网络编程领域,特别是在C/S(客户端/服务器)架构中表现优异。 ### 知识点一:线程管理 #### ACE_Thread ACE_Thread是ACE框架中用于处理线程操作的一个核心类。在给定的部分内容中,可以看到对`ACE_...
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN"); System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-...
C标准库源码
在"socket_send_buf_thread.c"和"socket_send_buf_thread.h"这两个源代码文件中,我们很可能看到以下核心概念: 1. **套接字创建**:使用`socket()`函数创建一个socket实例。该函数接收三个参数,分别是协议族(如...
package c14; import java.awt.*; import java.awt.event.*; import java.applet.*; public class Counter1 extends Applet { private int count = 0; private Button onOff = new Button("Toggle"); private ...
在`driver_thread.zip`中的`thread.c`文件中,可能会包含这样的回调函数。回调函数一般会包含循环结构,用于持续处理任务,直到线程被关闭。 3. **线程同步** 在多线程环境中,线程同步是非常重要的,以防止数据...
描述中的"Can't locate ThreadQueue.pm"是Perl运行时的一个典型错误信息,表示Perl解释器在@INC路径下找不到ThreadQueue模块的源码文件。@INC包含了Perl会搜索模块的目录列表,通常是Perl的安装目录,以及可能的...
"portScan---thread.zip__scanThread_portscan_thread c" 提供的资源似乎是一个用C#语言实现的线程化端口扫描程序。在这个项目中,开发者使用了多线程技术来提高扫描效率,这在处理大量并发连接时非常有用。 1. **...
- main.c:入口点,通常包含rtthread_init和任务创建等代码。 - led.c/h:LED灯控制的源码和头文件,实现了任务的具体功能。 - Kconfig和Makefile:用于构建项目的配置文件和构建脚本。 - 其他可能包括rtthread相关...
接着,我们看看`thread.c`和`thread.h`文件。`thread.h`通常包含线程函数声明和可能的数据结构定义,例如: ```c #ifndef THREAD_H #define THREAD_H #include <windows.h> // 线程函数声明 DWORD WINAPI Thread...