Vcpkg使用注意与常见问题

  1. 如果已经成功 安装 了一个 vs 里却引用不到,多半是因为 项目 设置的 build 的版本与 vcpkg编译 版本不匹配。所以解决办法有两种;一种是更该 项目 build 的版本。可以在 解决方案Property 中修改Solution Property
    另一种就是在 vcpkg安装 指定版本的 。如想安装 x64-windows 版本的:
vcpkg install glad:x64-windows

还可以通过设置 _环境变量_来在 vcpkg 安装库时自动 编译 成设置的版本:

VCPKG_DEFAULT_TRIPLET=x64-windows
  1. 可以使用 search 子命令来查找 vcpkg 中集成的 :
vcpkg install [packages to install]
  1. 如想让 powershell, bat脚本命令行 工具 识别 vcpkg 命令,需要把 安装目录(通常为 C:\src\vcpkgC:\vcpkg)添加进 环境变量,否则需输入 安装目录 运行。
vcpkg使用的无锁队列是一个基于 CAS (Compare and Swap) 操作的实现,它的实现位于 vcpkg 的 `include/vcpkg/fwdlock.h` 头文件中。 无锁队列的实现使用C++11 中的 `std::atomic` 类型,它支持原子操作,并且可以避免多线程访问时的竞争问题。在无锁队列中,每个节点包含一个数据项和一个指向下一个节点的指针,节点的插入和删除操作都是通过原子 CAS 操作来实现的。 无锁队列的代码示例: ```c++ template <typename T> class fwdlock { public: fwdlock() : head_(nullptr), tail_(nullptr) {} void push(T data) { node* n = new node(std::move(data)); node* t = tail_.load(std::memory_order_relaxed); do { n->next_ = t; } while (!tail_.compare_exchange_weak(t, n, std::memory_order_release, std::memory_order_relaxed)); } bool try_pop(T& data) { node* h = head_.load(std::memory_order_relaxed); node* t = tail_.load(std::memory_order_acquire); if (h == t) { return false; } node* next = h->next_; data = std::move(next->data_); head_.store(next, std::memory_order_release); delete h; return true; } private: struct node { T data_; node* next_; node(T data) : data_(std::move(data)), next_(nullptr) {} }; std::atomic<node*> head_; std::atomic<node*> tail_; }; ``` 在上述代码中,`fwdlock` 类实现了无锁队列的 push 和 try_pop 操作,其中 push 操作使用了 `compare_exchange_weak` 原子操作,try_pop 操作使用了 `load` 和 `store` 原子操作。使用无锁队列可以有效减少多线程并发访问时的竞争和锁等待,从而提高代码的性能和可伸缩性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值