ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

多线程入门

2020-07-06 16:34:59  阅读:257  来源: 互联网

标签:typedef 入门 thread int 线程 atomic uint 多线程


线程创建

#include <thread>//C++11引入的标准线程库
thread t(TestThreadFun);//thread t= thread
(TestThreadFun);//创建了一个线程对象来执行线程函数TestThreadFun
thread* pt = new thread(TestThreadFunction);//直接创建出来的线程对象,如果没有说明销毁的方式,在程序结束的时候回产生错误。
  • 说明线程销毁方式有两种
  • detach:使线程和主线程之间不再有联系
  • join:如果是join方式,主线程要等join的线程结束才能执行
  • t.detach();

互斥锁

#include<mutex>//互斥锁对象
mutex g_Mutex1;//创建互斥锁对象
int g_num=0;
lock_guard<mutex> _selfunlock(g_Mutex1);//自解锁,出了作用域自动销毁
g_Mutex1.lock();//锁住
g_num++;
g_Mutex1.unlock();//解锁
  • 使用互斥锁的时候,虽然能够保证公共数据点安全,但是不能乱用
    锁的数据范围,尽可能的小,锁住的东西越多越慢,锁越多也越慢。

原子变量

#include<atomic>
 
atomic<int>g_num_ato;//atomic_int g_num_ato;//原子变量
atomic_int//等价上面
//原子操作支持的类型

typedef atomic<bool> atomic_bool;

typedef atomic<char> atomic_char;
typedef atomic<signed char> atomic_schar;
typedef atomic<unsigned char> atomic_uchar;
typedef atomic<short> atomic_short;
typedef atomic<unsigned short> atomic_ushort;
typedef atomic<int> atomic_int;
typedef atomic<unsigned int> atomic_uint;
typedef atomic<long> atomic_long;
typedef atomic<unsigned long> atomic_ulong;
typedef atomic<long long> atomic_llong;
typedef atomic<unsigned long long> atomic_ullong;

typedef atomic<char16_t> atomic_char16_t;
typedef atomic<char32_t> atomic_char32_t;

typedef atomic<wchar_t> atomic_wchar_t;

typedef atomic<int8_t> atomic_int8_t;
typedef atomic<uint8_t> atomic_uint8_t;
typedef atomic<int16_t> atomic_int16_t;
typedef atomic<uint16_t> atomic_uint16_t;
typedef atomic<int32_t> atomic_int32_t;
typedef atomic<uint32_t> atomic_uint32_t;
typedef atomic<int64_t> atomic_int64_t;
typedef atomic<uint64_t> atomic_uint64_t;

typedef atomic<int_least8_t> atomic_int_least8_t;
typedef atomic<uint_least8_t> atomic_uint_least8_t;
typedef atomic<int_least16_t> atomic_int_least16_t;
typedef atomic<uint_least16_t> atomic_uint_least16_t;
typedef atomic<int_least32_t> atomic_int_least32_t;
typedef atomic<uint_least32_t> atomic_uint_least32_t;
typedef atomic<int_least64_t> atomic_int_least64_t;
typedef atomic<uint_least64_t> atomic_uint_least64_t;

typedef atomic<int_fast8_t> atomic_int_fast8_t;
typedef atomic<uint_fast8_t> atomic_uint_fast8_t;
typedef atomic<int_fast16_t> atomic_int_fast16_t;
typedef atomic<uint_fast16_t> atomic_uint_fast16_t;
typedef atomic<int_fast32_t> atomic_int_fast32_t;
typedef atomic<uint_fast32_t> atomic_uint_fast32_t;
typedef atomic<int_fast64_t> atomic_int_fast64_t;
typedef atomic<uint_fast64_t> atomic_uint_fast64_t;

typedef atomic<intptr_t> atomic_intptr_t;
typedef atomic<uintptr_t> atomic_uintptr_t;
typedef atomic<size_t> atomic_size_t;
typedef atomic<ptrdiff_t> atomic_ptrdiff_t;
typedef atomic<intmax_t> atomic_intmax_t;
typedef atomic<uintmax_t> atomic_uintmax_t;

多线程进度条练习

  • 用线程调用加载资源的函数(每次循环随机等待一下,没循环一次修改一下全局的进度变量)
    主线程中,循环访问全局进度变量,将当前的进度换成百分比输出,并且绘制进度条的变化
  • printf("当前线程的id: %d\n", this_thread::get_id());//获取线程id
  • this_thread::sleep_for(std::chrono::seconds(rand()%5+1));//#include 或者引入头文件
#include<iostream>
#include<thread>
#include<atomic>
#include<stdio.h>
using namespace std;

atomic<int>g_num_ato=0;

void fun(int n)
{
	for (int i = 0; i < n; i++)
	{
		g_num_ato++;
		this_thread::sleep_for(std::chrono::seconds(rand()%5+1));
	}
}
int main()
{
	thread t = thread(fun,100);
	t.detach();
	
	while (g_num_ato <100)
	{
		system("cls");
		int iTem = g_num_ato;
		cout << "当前值是:" << iTem << "%" << endl;
		for (int i = 0; i < iTem /5; i++)
		{
			cout << "★";
		}
	}
	cout << "加载完成"<<endl;
	system("pause");
	return 0;
}

标签:typedef,入门,thread,int,线程,atomic,uint,多线程
来源: https://www.cnblogs.com/biu-we/p/13255040.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有