不用使用c++ 11 std:mutex

最近在工程vs2013 使用 std:mutex 互斥对象,用于防止线程竞争,在自己win10可以正常运行,在win7 上面会崩溃,抛出异常。我自己使用DLL库,编译运行库用mt .然后google 好多,发现很多类似的问题。貌似都是不推荐使用微软实现该std::mutex,我真的无语了,标准的库兼容性都这么差。

后面只能网上找自己封装的mutex,方便自己用于线程竞争了


#ifndef _Lock_H
#define _Lock_H
#include

//锁接口类
class IMyLock
{
public:
virtual ~IMyLock() {}
virtual void Lock() const = 0;
virtual void Unlock() const = 0;
};

//互斥对象锁类
class Mutex : public IMyLock
{
public:
Mutex();
~Mutex();
virtual void Lock() const;
virtual void Unlock() const;
private:
HANDLE m_mutex;
};

//锁
class CLock
{
public:
CLock(const IMyLock&);
~CLock();
private:
const IMyLock& m_lock;
};
#endif

cpp:
#include "stdafx.h"
#include "Lock.h"
//创建一个匿名互斥对象
Mutex::Mutex()
{
m_mutex = ::CreateMutex(NULL, FALSE, NULL);
}
//销毁互斥对象,释放资源
Mutex::~Mutex()
{
::CloseHandle(m_mutex);
}
//确保拥有互斥对象的线程对被保护资源的独自访问
void Mutex::Lock() const
{
DWORD d = WaitForSingleObject(m_mutex, INFINITE);
}
//释放当前线程拥有的互斥对象,以使其它线程可以拥有互斥对象,对被保护资源进行访问
void Mutex::Unlock() const
{
::ReleaseMutex(m_mutex);
}
//利用C++特性,进行自动加锁
CLock::CLock(const IMyLock& m) : m_lock(m)
{
m_lock.Lock();
}
//利用C++特性,进行自动解锁
CLock::~CLock()
{
m_lock.Unlock();
}

openssl无需编译方法

背景:

因为最近用到加密算法,c++ 没有自带算法库,所以决定用openssl库里面的算法,习惯了python,java 管理库,再回到c++使用第三方库,感觉好痛苦。

目的:

不需要编译,直接拿过来用。

解决方案:

1:动态库:

https://slproweb.com/products/Win32OpenSSL.html

可以直接安装,在安装目录引进include 和lib, 就直接跑起来。理论复制到自己编译程序目录,也能跑起来,没有测试过。

2:静态库

https://zhuanlan.zhihu.com/p/31154924

这个别人编译好的,直接引进,就能直接跑起来了。