C++11 并发编程,unique_lock(),运行崩溃,这是为啥

C++11 并发编程,unique_lock(),运行崩溃,这是为啥,第1张

#include <iostream>

#include <mutex>

std::mutex mtx// 全局互斥锁.

int main()

{

// 初始缺备塌化的时伏圆候l1已经是加锁状态,再次加锁崩溃

std::unique_lock<std::mutex>l1(mtx) 

std::cout <<"1" <<std::endl

l1.unlock()

return 0

}

注:滚橡记得加头文件mutex和命名空间std

首先我们先找到Visual Studio编辑器中的“解决方案”,右键点击并在下拉菜单塌迟中找到属性并点击。

点击后会出现一个d窗,在里面找到“调试源文件”,在右边列表中找到include文件夹的路径并复制下来。

在文件资源管理器中输入路径找到include文件夹。在include文件夹中新建一个文件夹bits。

在桌面创建一个txt文档,在文档中输入代码,这里提供一个万能头文件的代码和一个线性筛素数函数的代码。

//万能头文件代码 txt文档命名为stdc++

// C

#ifndef _GLIBCXX_NO_ASSERT

#include <cassert>

#endif

#include <cctype>

#include <cerrno>

#include <cfloat>

#include <ciso646>

#include <climits>

#include <clocale>

#include <cmath>

#include <csetjmp>

#include <csignal>

#include <cstdarg>

#include <cstddef>

#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <ctime>

#if __cplusplus >= 201103L

#include <ccomplex>

#include <cfenv>

#include <cinttypes>

#include <cstdalign>

#include <cstdbool>

#include <cstdint>

#include <ctgmath>

#include <cwchar>

#include <cwctype>

#endif

// C++

#include <algorithm>

#include <bitset>

#include <complex>

#include <deque>

#include <exception>

#include <fstream>

#include <functional>

#include <iomanip>

#include <ios>

#include <iosfwd>

#include <iostream>

#include <istream>

#include <iterator>

#include <limits>

#include <list>

#include <locale>

#include <map>

#include <memory>

#include <new>

#include <numeric>

#include <ostream>

#include <queue>

#include <set>

#include <sstream>

#include <stack>

#include <stdexcept>

#include <streambuf>

#include <string>告衫肢

#include <typeinfo>

#include <utility>

#include <valarray>

#include <vector>

#if __cplusplus >= 201103L

#include <array>

#include <atomic>

#include <chrono>

#include <condition_variable>

#include <forward_list>

#include <future>

#include <initializer_list>

#include <mutex>

#include <random>

#include <ratio>

#include <regex>

#include <scoped_allocator>

#include <system_error>

#include <thread>

#include <tuple>

#include <typeindex>

#include <type_traits>

#include <袜世unordered_map>

#include <unordered_set>

#endif

//线性素数筛代码

bool vis[100005]

int prime[10005]

int cnt=0

void xianxingshai()

{

for(int i=2i<=100005i++)

{

if(!vis[i]) prime[++cnt]=i

for(int j=1j<=cnt,i*prime[j]<=100005j++)

{

vis[i*prime[j]]=1

if(i%prime[j]==0) break

}

}

}

//插入由此代码组成的头文件后 标识符cnt vis prime 将不可用

//prime[i]可表示第i个素数,直接使用即可

//素数不超过100005

然后将txt文档的后缀名从.txt改为.h,并复制到文件夹bits中(这里会显示需要提供管理员权限,直接点就可以了,不需要管)。

然后这些头文件就可以直接使用啦,使用方法如下所示:

这样制作一个自己的头文件就成功啦。

这个锁的方法我没用过,没法知道是不是旅宽你代码上的问题。。你试试我之前用过的一个方法吧,用的是关键段做的

#include <windows.h>

#include <process.h> // 忘了是哪个头文如握件了

CRITICAL_SECTION lock // 锁的申明渣镇庆,在所有线程开始前

EnterCriticalSection(&lock) // 获取临界区锁

临界区动作

LeaveCriticalSection(&lock) // 释放临界区锁

DeleteCriticalSection(&lock) // 锁的销毁,在所有线程结束后

参考资料:

http://blog.csdn.net/morewindows/article/details/7442639

这个博客一系列文章讲解了很多线程的问题,值得一看。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12162544.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存