fbpx
维基百科

线程

线程(英語:thread)在计算机科学中,是将进程划分为两个或多个线程(实例)或子进程,由单处理器(单线程)或多处理器(多线程)或多核处理系统并发执行。

「线程」的各地常用別名
中国大陸线程
臺灣執行緒
港澳線程

狀態 编辑

執行緒有四種基本狀態,分別為:

  • 產生(spawn
  • 阻塞(block
  • 非阻塞(unblock
  • 結束(finish

线程包含要素 编辑

  • 线程内核对象(thread kernel object)
  • 线程环境块(thread environment block, TEB)
  • 用户模式栈(user-mode stack)(unblock
  • 内核模式栈(kernal-mode stack)(thread environment block, TEB)
  • DLL线程连接(attach)和线程分离(detach)通知(kernal-mode stack)

不同平台的线程 编辑

UNIX International线程 编辑

UNIX International线程简介 编辑

SUN Solaris操作系统使用的线程叫做UNIX International线程,支持内核线程、轻权进程和用户线程。一个进程可有大量用户线程;大量用户线程复用少量的轻权进程,轻权进程与内核线程一一对应。用户级线程在调用核心服务时(如文件读写),需要“捆绑(bound)”在一个LWP上。永久捆绑(一个LWP固定被一个用户级线程占用,该LWP移到LWP池之外)和临时捆绑(从LWP池中临时分配一个未被占用的LWP)。在调用系统服务时,如果所有LWP已被其他用户级线程所占用(捆绑),则该线程阻塞直到有可用的LWP。如果LWP执行系统线程时阻塞(如read()调用),则当前捆绑在LWP上的用户级线程也阻塞。

UNIX International线程的有关API 编辑

UNIX International线程的头文件是<thread.h>[1]

创建用户级线程 编辑
int thr_create(void * stack_base, size_t stack_size, void *(*start_routinevoid *), void * arg, long flags, thread_t * new_thr); 

其中flags包括:THR_BOUND(永久捆绑), THR_NEW_LWP(创建新LWP放入LWP池),若两者同时指定则创建两个新LWP,一个永久捆绑而另一个放入LWP池。

等待用户级线程 编辑
int thr_join(thread_t wait_for, thread_t *dead, void **status); 
挂起用户级线程 编辑
int thr_suspend(thread_t thr); 
继续用户级线程 编辑
int thr_continue(thread_t thr); 
退出用户级线程 编辑
void thr_exit(void *status); 
返回当前用户级线程的线程标识符 编辑
thread_t thr_self( void ); 

POSIX线程 编辑

POSIX线程简介 编辑

POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(UnixLinuxMac OS X等)中,都使用Pthreads作为操作系统的线程[2][3][4]Windows操作系统也有其移植版pthreads-win32[5]

POSIX线程的有关API 编辑

Pthreads线程的头文件是<pthread.h>[6][7]

创建用户线程 编辑
int pthread_create(pthread_t * thread, const pthread_attr_t * attr, void *(*start_routine)(void *), void *arg); 
等待用户线程 编辑
int pthread_join(pthread_t thread, void ** retval); 
退出用户线程 编辑
void pthread_exit(void *retval); 
返回当前用户线程的线程标识符 编辑
pthread_t pthread_self(void); 
用户线程的取消 编辑
int pthread_cancel(pthread_t thread); 

Win32线程 编辑

Win32线程简介 编辑

Win32线程是Windows API的一部分,上下文包括:寄存器、核心栈、线程环境块和用户栈。

Win32线程的有关API 编辑

Win32线程的头文件是<Windows.h>,仅适用于Windows操作系统。[8]

创建用户线程 编辑
HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); 
结束本线程 编辑
VOID WINAPI ExitThread(DWORD dwExitCode); 
挂起指定的线程 编辑
DWORD WINAPI SuspendThread( HANDLE hThread ); 
恢复指定线程运行 编辑
DWORD WINAPI ResumeThread(HANDLE hThread); 
等待线程运行完毕 编辑
DWORD WINAPI WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); 
返回当前线程的线程标识符 编辑
DWORD WINAPI GetCurrentThreadId(void); 
返回当前线程的线程句柄 编辑
HANDLE WINAPI GetCurrentThread(void); 

跨平台的线程 编辑

C++11线程 编辑

C++11线程简介 编辑

2011年8月12日,国际标准化组织(ISO)发布了第三个C++标准,即ISO/IEC 14882:2011,简称ISO C++ 11标准。该标准第一次把线程的概念引入C++标准库。Windows平台运行的VS2012Linux平台运行的g++4.7,都完美支持C++11线程。

C++11线程的有关函数 编辑

C++ 11线程的头文件是<thread>[9]

创建线程 编辑
std::thread::thread(Function&& f, Args&&... args); 
等待线程结束 编辑
std::thread::join(); 
脱离线程控制 编辑
std::thread::detach(); 
交换线程 编辑
std::thread::swap(thread& other); 

C11线程 编辑

C11线程简介 编辑

2011年12月8日,国际标准化组织(ISO)发布了第三个C语言标准,即ISO 9899:2011,简称ISO C 11标准。该标准第一次把线程的概念引入C语言标准库。

C11线程仅仅是个“建议标准”,也就是说100%遵守C11标准的C编译器是可以不支持C11线程的。根据C11标准的规定,只要编译器预定义了 __STDC_NO_THREADS__(C11),就可以没有<threads.h>头文件,自然也就也没有下列函数。

C11线程的有关函数 编辑

C11线程的头文件是<threads.h>[10]

创建线程 编辑
int thrd_create(thrd_t *thr, thrd_start_t func, void *arg); 
结束本线程 编辑
_Noreturn void thrd_exit( int res ); 
等待线程运行完毕 编辑
int thrd_join(thrd_t thr, int *res); 
返回当前线程的线程标识符 编辑
thrd_t thrd_current(); 

Java线程 编辑

  1. 最简单的情况是,Thread/Runnablerun()方法运行完毕,自行终止。
  2. 对于更复杂的情况,比如有循环,则可以增加终止标记变量和任务终止的检查点。
  3. 最常见的情况,也是为了解决阻塞不能执行检查点的问题,用中断来结束线程,但中断只是请求,并不能完全保证线程被终止,需要执行线程协同处理。
  4. IO阻塞和等锁情况下需要通过特殊方式进行处理。
  5. 使用Future类的cancel()方法调用。
  6. 调用线程池执行器的shutdown()shutdownNow()方法。
  7. 守护线程会在非守护线程都结束时自动终止。
  8. Thread有stop()方法,但已不推荐使用。

参见 编辑

参考资料 编辑

  1. ^ Novell Doc: NDK: Libraries for C (LibC), Volume 2 - UI Thread Functions (页面存档备份,存于互联网档案馆), NOVELL Worldwide
  2. ^ pthreads (7) 互联网档案馆的,存档日期2013-10-08., UNIX man pages
  3. ^ pthreads (7) (页面存档备份,存于互联网档案馆), Linux manual page
  4. ^ pthread (3) Mac OS X Developer Tools Manual Page (页面存档备份,存于互联网档案馆), Apple Developer
  5. ^ POSIX Threads (pthreads) for Win32 (页面存档备份,存于互联网档案馆), sourceware.org: Free software! Get your fresh hot free software!
  6. ^ PTHREAD_CREATE (页面存档备份,存于互联网档案馆), Linux Man Pages
  7. ^ POSIX Threads Programming (页面存档备份,存于互联网档案馆), High Performance Computing: High Performance Computing
  8. ^ Multiple Threads (Windows) (页面存档备份,存于互联网档案馆), MSDN-the microsoft developer network
  9. ^ std::thread (页面存档备份,存于互联网档案馆), cppreference.com
  10. ^ Thread support library (页面存档备份,存于互联网档案馆), cppreference.com

线程, 提示, 此条目的主题不是threads, 英語, thread, 在计算机科学中, 是将进程划分为两个或多个, 实例, 或子进程, 由单处理器, 或多处理器, 或多核处理系统并发执行, 的各地常用別名中国大陸臺灣執行緒港澳線程, 目录, 狀態, 包含要素, 不同平台的, unix, international, unix, international简介, unix, international的有关api, 创建用户级, 等待用户级, 挂起用户级, 继续用户级, 退出用户级, 返回当前用户级的标识符, p. 提示 此条目的主题不是Threads 线程 英語 thread 在计算机科学中 是将进程划分为两个或多个线程 实例 或子进程 由单处理器 单线程 或多处理器 多线程 或多核处理系统并发执行 线程 的各地常用別名中国大陸线程臺灣執行緒港澳線程 目录 1 狀態 2 线程包含要素 3 不同平台的线程 3 1 UNIX International线程 3 1 1 UNIX International线程简介 3 1 2 UNIX International线程的有关API 3 1 2 1 创建用户级线程 3 1 2 2 等待用户级线程 3 1 2 3 挂起用户级线程 3 1 2 4 继续用户级线程 3 1 2 5 退出用户级线程 3 1 2 6 返回当前用户级线程的线程标识符 3 2 POSIX线程 3 2 1 POSIX线程简介 3 2 2 POSIX线程的有关API 3 2 2 1 创建用户线程 3 2 2 2 等待用户线程 3 2 2 3 退出用户线程 3 2 2 4 返回当前用户线程的线程标识符 3 2 2 5 用户线程的取消 3 3 Win32线程 3 3 1 Win32线程简介 3 3 2 Win32线程的有关API 3 3 2 1 创建用户线程 3 3 2 2 结束本线程 3 3 2 3 挂起指定的线程 3 3 2 4 恢复指定线程运行 3 3 2 5 等待线程运行完毕 3 3 2 6 返回当前线程的线程标识符 3 3 2 7 返回当前线程的线程句柄 4 跨平台的线程 4 1 C 11线程 4 1 1 C 11线程简介 4 1 2 C 11线程的有关函数 4 1 2 1 创建线程 4 1 2 2 等待线程结束 4 1 2 3 脱离线程控制 4 1 2 4 交换线程 4 2 C11线程 4 2 1 C11线程简介 4 2 2 C11线程的有关函数 4 2 2 1 创建线程 4 2 2 2 结束本线程 4 2 2 3 等待线程运行完毕 4 2 2 4 返回当前线程的线程标识符 4 3 Java线程 5 参见 6 参考资料狀態 编辑執行緒有四種基本狀態 分別為 產生 spawn 阻塞 block 非阻塞 unblock 結束 finish 线程包含要素 编辑线程内核对象 thread kernel object 线程环境块 thread environment block TEB 用户模式栈 user mode stack unblock 内核模式栈 kernal mode stack thread environment block TEB DLL线程连接 attach 和线程分离 detach 通知 kernal mode stack 不同平台的线程 编辑UNIX International线程 编辑 UNIX International线程简介 编辑 SUN Solaris 操作系统使用的线程叫做UNIX International 线程 支持内核线程 轻权进程和用户线程 一个进程可有大量用户线程 大量用户线程复用少量的轻权进程 轻权进程与内核线程一一对应 用户级线程在调用核心服务时 如文件读写 需要 捆绑 bound 在一个LWP 上 永久捆绑 一个LWP 固定被一个用户级线程占用 该LWP 移到LWP 池之外 和临时捆绑 从LWP 池中临时分配一个未被占用的LWP 在调用系统服务时 如果所有LWP 已被其他用户级线程所占用 捆绑 则该线程阻塞直到有可用的LWP 如果LWP 执行系统线程时阻塞 如read 调用 则当前捆绑在LWP 上的用户级线程也阻塞 UNIX International线程的有关API 编辑 UNIX International 线程的头文件是 lt thread h gt 1 创建用户级线程 编辑 int thr create void stack base size t stack size void start routine void void arg long flags thread t new thr 其中flags 包括 THR BOUND 永久捆绑 THR NEW LWP 创建新LWP 放入LWP 池 若两者同时指定则创建两个新LWP 一个永久捆绑而另一个放入LWP 池 等待用户级线程 编辑 int thr join thread t wait for thread t dead void status 挂起用户级线程 编辑 int thr suspend thread t thr 继续用户级线程 编辑 int thr continue thread t thr 退出用户级线程 编辑 void thr exit void status 返回当前用户级线程的线程标识符 编辑 thread t thr self void POSIX线程 编辑 主条目 pthread POSIX线程简介 编辑 POSIX 线程 POSIX threads 简称Pthreads 是线程的POSIX 标准 该标准定义了创建和操纵线程的一整套API 在类Unix 操作系统 Unix Linux Mac OS X 等 中 都使用Pthreads 作为操作系统的线程 2 3 4 Windows 操作系统也有其移植版pthreads win32 5 POSIX线程的有关API 编辑 Pthreads 线程的头文件是 lt pthread h gt 6 7 创建用户线程 编辑 int pthread create pthread t thread const pthread attr t attr void start routine void void arg 等待用户线程 编辑 int pthread join pthread t thread void retval 退出用户线程 编辑 void pthread exit void retval 返回当前用户线程的线程标识符 编辑 pthread t pthread self void 用户线程的取消 编辑 int pthread cancel pthread t thread Win32线程 编辑 Win32线程简介 编辑 Win32 线程是Windows API 的一部分 上下文包括 寄存器 核心栈 线程环境块和用户栈 Win32线程的有关API 编辑 Win32 线程的头文件是 lt Windows h gt 仅适用于Windows 操作系统 8 创建用户线程 编辑 HANDLE WINAPI CreateThread LPSECURITY ATTRIBUTES lpThreadAttributes SIZE T dwStackSize LPTHREAD START ROUTINE lpStartAddress LPVOID lpParameter DWORD dwCreationFlags LPDWORD lpThreadId 结束本线程 编辑 VOID WINAPI ExitThread DWORD dwExitCode 挂起指定的线程 编辑 DWORD WINAPI SuspendThread HANDLE hThread 恢复指定线程运行 编辑 DWORD WINAPI ResumeThread HANDLE hThread 等待线程运行完毕 编辑 DWORD WINAPI WaitForSingleObject HANDLE hHandle DWORD dwMilliseconds 返回当前线程的线程标识符 编辑 DWORD WINAPI GetCurrentThreadId void 返回当前线程的线程句柄 编辑 HANDLE WINAPI GetCurrentThread void 跨平台的线程 编辑C 11线程 编辑 主条目 Thread C 标准库 C 11线程简介 编辑 2011年8月12日 国际标准化组织 ISO 发布了第三个C 标准 即ISO IEC 14882 2011 简称ISO C 11标准 该标准第一次把线程的概念引入C 标准库 Windows 平台运行的VS2012 和Linux 平台运行的g 4 7 都完美支持C 11线程 C 11线程的有关函数 编辑 C 11线程的头文件是 lt thread gt 9 创建线程 编辑 std thread thread Function amp amp f Args amp amp args 等待线程结束 编辑 std thread join 脱离线程控制 编辑 std thread detach 交换线程 编辑 std thread swap thread amp other C11线程 编辑 C11线程简介 编辑 2011年12月8日 国际标准化组织 ISO 发布了第三个C语言标准 即ISO 9899 2011 简称ISO C 11 标准 该标准第一次把线程的概念引入C语言标准库 C11线程仅仅是个 建议标准 也就是说100 遵守C11标准的C编译器是可以不支持C11线程的 根据C11标准的规定 只要编译器预定义了 STDC NO THREADS C11 就可以没有 lt threads h gt 头文件 自然也就也没有下列函数 C11线程的有关函数 编辑 C11线程的头文件是 lt threads h gt 10 创建线程 编辑 int thrd create thrd t thr thrd start t func void arg 结束本线程 编辑 Noreturn void thrd exit int res 等待线程运行完毕 编辑 int thrd join thrd t thr int res 返回当前线程的线程标识符 编辑 thrd t thrd current Java线程 编辑 最简单的情况是 Thread Runnable 的run 方法运行完毕 自行终止 对于更复杂的情况 比如有循环 则可以增加终止标记变量和任务终止的检查点 最常见的情况 也是为了解决阻塞不能执行检查点的问题 用中断来结束线程 但中断只是请求 并不能完全保证线程被终止 需要执行线程协同处理 IO阻塞和等锁情况下需要通过特殊方式进行处理 使用Future 类的cancel 方法调用 调用线程池执行器的shutdown 和shutdownNow 方法 守护线程会在非守护线程都结束时自动终止 Thread有stop 方法 但已不推荐使用 参见 编辑多线程参考资料 编辑 Novell Doc NDK Libraries for C LibC Volume 2 UI Thread Functions 页面存档备份 存于互联网档案馆 NOVELL Worldwide pthreads 7 互联网档案馆的存檔 存档日期2013 10 08 UNIX man pages pthreads 7 页面存档备份 存于互联网档案馆 Linux manual page pthread 3 Mac OS X Developer Tools Manual Page 页面存档备份 存于互联网档案馆 Apple Developer POSIX Threads pthreads for Win32 页面存档备份 存于互联网档案馆 sourceware org Free software Get your fresh hot free software PTHREAD CREATE 页面存档备份 存于互联网档案馆 Linux Man Pages POSIX Threads Programming 页面存档备份 存于互联网档案馆 High Performance Computing High Performance Computing Multiple Threads Windows 页面存档备份 存于互联网档案馆 MSDN the microsoft developer network std thread 页面存档备份 存于互联网档案馆 cppreference com Thread support library 页面存档备份 存于互联网档案馆 cppreference com 取自 https zh wikipedia org w index php title 线程 amp oldid 77978991, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。