C++11 thread mutex 我怎么感觉我被坑了。

Stella981
• 阅读 763

二话不说,直接上代码了。

#include <thread>
#include <iostream>
#include <mutex>
using namespace std;

volatile int shared_value = 0;
volatile int running_count = 1000;
mutex mtx;


void change_value (int n)
{
    for (int i = 0; i < n; i++)
    {
        if (mtx.try_lock())
        {
            shared_value++;
            mtx.unlock();
        }
    }
    running_count--;
}

int main ()
{
    thread t[100];
    for (int i = 0; i < 100; i++)
    {
        t[i] = thread (change_value, 1000);
    }
    for (int i = 0; i < 100; i++)
    {
        t[i].join();
    }
    
    cout << shared_value << endl;
    cout << running_count << endl;


    return 0;
}
点赞
收藏
评论区
推荐文章
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
Java基础面试题(三) (2020持续更新)
前言全套面试题请直接转到文章末尾1.Java中能创建volatile数组吗?能,Java中可以创建volatile类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到volatile的保护,
Wesley13 Wesley13
3年前
C++原子类实现
引言在系统实现的过程中,经常需要用到计数功能,为了多线程下的安全使用,我自己定义了一个原子类。基于Mutex的实现我基于Mutex实现了一个简单的原子类,代码如下/说明:自定义整数操作的原子类,减少代码中的各种锁/ifndef_ATOMIC_INT64
Stella981 Stella981
3年前
C++ multimap初步使用
multimap与map的区别就在于,multimap可以一个键值对应多个值,而map只能一个键值对应一个值include <iostreaminclude <mapint main(){std::multimap<int,int x;x.insert(std::pa
Wesley13 Wesley13
3年前
16进制显示文件内容
include <iostreaminclude <stdio.husing namespace std;define BUFF_SIZE 20int main (){FILE fp;fp  fopen("epp370p0190_0408.13
Stella981 Stella981
3年前
C++语法学习笔记四十八:单例设计模式共享数据分析、解决,call_once
实例代码://include<iostreaminclude<vectorinclude<threadinclude<mutexusingnamespacestd;classA{public:
Wesley13 Wesley13
3年前
C语言宏定义中#用法
宏中""和""的用法一、一般用法我们使用把宏参数变为一个字符串,用把两个宏参数贴合在一起.用法:#include<cstdio#include<climitsusing namespace std;define STR(s)     sdefine CONS(a,b)  int
Wesley13 Wesley13
3年前
C++11 STL线程库实现一个简单的线程池
使用C11STL线程库实现一个线程池。处理机制是抢占式的,即所有线程从一个队列(std::queue)中获取任务执行(计算字符串简单HASH值),使用std::mutex和std::conditional\_variable实现队列访问并发协调。include<iostreaminclude<ioma
Stella981 Stella981
3年前
JVM 字节码指令表
字节码助记符指令含义0x00nop什么都不做0x01aconst\_null将null推送至栈顶0x02iconst\_m1将int型1推送至栈顶0x03iconst\_0将int型0推送至栈顶0x04iconst\_1将int型1推送至栈顶0x05ic
Wesley13 Wesley13
3年前
9999二进制 及 x=x&(x
题目:以下代码结果是多少?\include<iostreamusingnamespacestd;int func(int x){int count\0;while(x){count;x\x&(x\1);