96SEO 2026-02-19 09:48 0
args)则需要使用到std::ref和std::cref很好地解决了这个问题std::ref

线程是在thread对象被定义的时候开始执行的而不是在调用join函数时才执行的调用join函数只是阻塞等待线程结束并回收资源。
分离的线程执行过detach的线程会在调用它的线程结束或自己结束时释放资源。
线程会在函数运行完毕后自动释放不推荐利用其他方法强制结束线程可能会因资源未释放而导致内存泄漏。
尝试将mutex上锁。
如果mutex未被上锁则将其上锁并返回true如果mutex已被锁则返回false。
4、std::atomic
意思是该类型的变量是原子类型的操作。
因为mutex的资源浪费较大总是要上锁解锁的。
引入atomic
std::atomic_int只是std::atomicint
表示定义一个int类型的原子属性的变量n他是线程安全的atomic()
default默认构造函数构造一个atomic对象未初始化可通过atomic_init进行初始化constexpr
noexcept初始化构造函数构造一个atomic对象用val的值来初始化
(lock.test_and_set(std::memory_order_acquire))
\n;lock.clear(std::memory_order_release);
}5、std::asyncstd::futurestd::shared_future
std::async定义在future头文件中新的线程类执行效率更高于thread并且可以选择同步异步执行还有返回值可以选择调用时间。
args)异步或同步根据操作系统而定以args为参数执行fn同样地传递引用参数需要std::ref或std::creftemplate
args);异步或同步根据policy参数而定见下文以args为参数执行fn引用参数同上。
std::launch有2个枚举值和1个特殊值枚举值launch::async、launch::deferred、launch::async
future::get()阻塞等待线程结束并获取返回值。
若类型为void则与future::wait()相同。
只能调用一次。
void
const;阻塞等待rel_timerel_time是一段时间若在这段时间内线程结束则返回future_status::ready若没结束则返回future_status::timeout若async是以launch::deferred启动的则不会阻塞并立即返回future_status::deferred
std::future的作用并不只有获取返回值它还可以检测线程是否已结束、阻塞等待所以对于返回值是void的线程来说future也同样重要。
(fut.wait_for(chrono::seconds(1))
故只有一个实例能指代任何特定的异步结果std::shared_future
t2_ready_promise;std::shared_futurevoid
ready_future(ready_promise.get_future());std::chrono::time_pointstd::chrono::high_resolution_clock
{t1_ready_promise.set_value();ready_future.wait();
std::chrono::high_resolution_clock::now()
{t2_ready_promise.set_value();ready_future.wait();
std::chrono::high_resolution_clock::now()
等待线程变为就绪t1_ready_promise.get_future().wait();t2_ready_promise.get_future().wait();//
std::chrono::high_resolution_clock::now();//
向线程发信使之运行ready_promise.set_value();std::cout
是实际上是std::future的一个包装但是作用确实想实现线程函数的左值引用将函数执行结果带回来。
(void)设置promise的值并将共享状态设为ready将future_status设为readyvoid特化只将共享状态设为readyfuture
get_future()构造一个future对象其值与promise相同status也与promise相同
)等待sleep_durationsleep_duration是一段时间void
noexcept暂时放弃线程的执行将主动权交给其他线程放心主动权还会回来template
chrono::time_pointClock,Duration
{this_thread::sleep_for(chrono::milliseconds(ms));
this_thread::yield();//暂时交出cpu执行for
thread(::count);sleep(5000);ready
defer_lock_t不获得互斥的所有权try_to_lock_t尝试获得互斥的所有权而不阻塞adopt_lock_t假设调用方线程已拥有互斥的所有权
构造互斥锁的写法就是会在lock_guard构造函数里加锁在析构函数里解锁达到自动加锁解锁的目的。
因此lock_guard的作用域就是锁的范围。
}虽然lock_guard挺好用的但是有个很大的缺陷在定义lock_guard的地方会调用构造函数加锁在离开定义域的话lock_guard就会被销毁调用析构函数解锁。
这就产生了一个问题如果这个定义域范围很大的话那么锁的粒度就很大很大程序上会影响效率。
所以为了解决lock_guard锁的粒度过大的原因unique_lock就出现了。
unique(mt);这个会在构造函数加锁然后可以利用unique.unlock()来解锁所以当你觉得锁的粒度太多的时候可以利用这个来解锁而析构的时候会判断当前锁的状态来决定是否解锁如果当前状态已经是解锁状态了那么就不会再次解锁而如果当前状态是加锁状态就会自动调用unique.unlock()来解锁。
而lock_guard在析构的时候一定会解锁也没有中途解锁的功能。
方便肯定是有代价的unique_lock内部会维护一个锁的状态所以在效率上肯定会比lock_guard慢。
(公开成员函数)operator若占有则解锁互斥并取得另一者的所有权
(公开成员函数)try_lock尝试锁定关联互斥若互斥不可用则返回
(公开成员函数)try_lock_for试图锁定关联的可定时锁定
(公开成员函数)try_lock_until尝试锁定关联可定时锁定
仍未实际取锁std::unique_lockstd::mutex
std::defer_lock);std::unique_lockstd::mutex
类是同步原语能用于阻塞一个线程或同时阻塞多个线程直至另一线程修改共享变量条件并通知
即使共享变量是原子的也必须在互斥下修改它以正确地发布修改到等待的线程。
被通知时时限消失或虚假唤醒发生线程被唤醒且自动重获得互斥。
之后线程应检查条件若唤醒是虚假的则继续等待。
的有谓词重载它们包揽以上三个步骤std::condition_variable
(公开成员函数)wait_for阻塞当前线程直到条件变量被唤醒或到指定时限时长后
(公开成员函数)wait_until阻塞当前线程直到条件变量被唤醒或直到抵达指定时间点
(公开成员函数)原生句柄native_handle返回原生句柄
processing\n;}cv.notify_one();//
worker{std::unique_lockstd::mutex
配合互斥锁达到互斥锁作用域范围内的自动上锁解锁unique_lock
在lock_guard基础上加了可以手动解锁的接口unlockatomic.hatomic
原子布尔类型condition_variable.hcondition_variablewait
的泛化waitwait_forwait_untilnotify_ontnotify_all
类似一个针对线程的类模板对象可以对线程进行管理的。
shared_future
故只有一个实例能指代任何特定的异步结果std::shared_future
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback