#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都是一样的,想知道这是怎么回事,有大佬指点吗?
点赞 评论

相关推荐

牛客网
牛客企业服务