关注
#include <bits/stdc++.h>
std::mutex data_mutex;
std::condition_variable data_var;
int flag=0;
int i=0;
int array[100]={0};
void modify(int arr[], int i){
int index=rand()%100;
std::cout<<index<<std::endl;
arr[index]=i+1;
}
void printA(int i){
while(1){
std::unique_lock<std::mutex> lck(data_mutex);
data_var.wait(lck, [=]{return flag==i;});
std::cout<<"Threadi:"<<i<<std::endl;
modify(array, i);
flag=(flag+1)%10;
data_var.notify_all();
}
}
int main(){
std::vector<std::thread> thread_arr;
thread_arr.reserve(10);
for(int i=0; i<10; ++i){
thread_arr.emplace_back(std::thread{printA, i});
}
for(int i=0; i<10; ++i){
thread_arr[i].join();
}
}
这个代码,我的想法是用i来区分10个线程,当flag==i的时候,执行当前线程,其他会阻塞等待flag
但是每10个线程生成的index都是一样的,想知道这是怎么回事,有大佬指点吗?
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
转发
不愿透露姓名的神秘牛友
03-17 16:51
点赞 评论 收藏
转发
点赞 评论 收藏
转发
牛客热帖
正在热议
# 牛客帮帮团来啦!有问必答 #
352143次浏览 7288人参与
# 你更愿意参加线上面试还是线下面试? #
4725次浏览 73人参与
# 晒一晒我的offer #
2766412次浏览 49495人参与
# 如何确定求职岗位 #
100968次浏览 2395人参与
# 华为求职进展汇总 #
433541次浏览 4353人参与
# 机械人怎么评价今年的华为 #
49341次浏览 404人参与
# 非技术岗薪资爆料 #
5033次浏览 115人参与
# 第一次面试 #
13844次浏览 212人参与
# 如果再来一次,你还会学硬件吗 #
16789次浏览 330人参与
# 海信求职进展汇总 #
6783次浏览 91人参与
# 通信硬件薪资爆料 #
137339次浏览 977人参与
# 来聊聊机械薪资天花板是哪家 #
18315次浏览 140人参与
# 找工作,你会甘心进小厂还是猛冲大厂 #
22082次浏览 212人参与
# 除了offer,现在你还缺点啥? #
2043次浏览 45人参与
# 应届生应该先就业还是先择业 #
10727次浏览 103人参与
# 通信硬件人笔面经互助 #
63593次浏览 1415人参与
# 百度工作体验 #
18994次浏览 205人参与
# 讲讲我经历过的年终奖 #
5807次浏览 76人参与
# 租房前辈的忠告 #
19763次浏览 1579人参与
# 软件开发薪资爆料 #
536020次浏览 9214人参与