网站建设公司专业网站开发研发,房产微信营销方案,怎么做一个公众号微信,深圳做网站做app简介
进程和线程的区别 进程#xff1a;一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间#xff0c;一个进程可以有多个线程#xff0c;比如在Windows系统中#xff0c;一个运行的xx.exe就是一个进程。 线程#xff1a;进程中的一个执行任务#xff08…简介
进程和线程的区别 进程一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间一个进程可以有多个线程比如在Windows系统中一个运行的xx.exe就是一个进程。 线程进程中的一个执行任务控制单元负责当前进程中程序的执行。一个进程至少有一个线程一个进程可以运行多个线程多个线程可共享数据。 与进程不同的是同类的多个线程共享进程的堆和方法区资源但每个线程有自己的程序计数器、虚拟机栈和本地方法栈所以系统在产生一个线程或是在各个线程之间作切换工作时负担要比进程小得多也正因为如此线程也被称为轻量级进程。更多
std::thread就是C11为开发者提供的线程类。他表示一个线程一般在构造的时候就会启动他的线程方法。线程方法的返回值会被忽略一般通过std::promise或者共享变量来获取。如果线程方法抛出了一场没有被处理的话std::terminate就会被调用。
头文件
#include threadAPI
构造方法
thread() noexcept; // 默认构造方法
thread( const thread ) delete; // 禁用拷贝构造方法
thread( thread other ) noexcept; // 移动构造方法暗示着一个thread对象只能表示一个线程不与其他thread对象共享// f可调用对象argsf的参数如果开调用对象无法正常起启动就会抛出异常[std::system_error](https://en.cppreference.com/w/cpp/error/system_error)
// args是采用移动或者以值的方法传递f如果想采用引用方式需要用std::ref或者std::cref包装一下
template class Function, class... Args
explicit thread( Function f, Args... args ); 例子https://en.cppreference.com/w/cpp/thread/thread/thread
析构方法
~thread(); // 如果当前thread对象依然关联着线程即joinable() true, 那么就会调用std::terminate()被调用移动赋值操作符
thread operator( thread other ) noexcept; // 如果当前thread对象依然关联着线程即joinable() true, 那么就会调用std::terminate()被调用成员方法
判断thread是否关联着一个有效线程如果thread被移动、销毁了或者调用thread默认构造方法构造的对象那么该方法就返回false
bool joinable() const noexcept;获取线程id
std::thread::id get_id() const noexcept; // 线程的唯一标识std::thread:id是一个类一般常用的方法有operator, operator。另外有一个特化的hash仿函数template struct hashstd::thread::id; hash参考代码
获取thread对象关联的线程句柄一般与pthread_getschedparampthread_setschedparam配合使用可以设置线程的优先级。 更多参考
native_handle_type native_handle();获取硬件支持的最大线程数他是thread的静态方法
static unsigned int hardware_concurrency() noexcept;等待线程函数执行结束他会阻塞当前线程。可能会抛出std::system_error异常
void join();分离线程与thread对象即thread对象不在管理该线程joinable方法会返回false调用join方法会抛出异常。当线程方法执行结束的时候相关资源才会被释放。可能会抛出std::system_error异常
void detach();交换两个thread对象关联的线程
void swap( std::thread other ) noexcept;在线尝试thread