C++后台开发
文章平均质量分 94
果冻虾仁
这个作者很懒,什么都没留下…
展开
-
C++ STL容器如何解决线程安全的问题?
众所周知,STL容器不是线程安全的。对于vector,即使写方(生产者)是单线程写入,但是并发读的时候,由于潜在的内存重新申请和对象复制问题,会导致读方(消费者)的迭代器失效。实际表现也就是招致了core dump。另外一种情况,如果是多个写方,并发的push_back(),也会导致core dump。解法一:加锁是一种解决方案,但是加std::mutex互斥锁确实性能较差。对于多读少写的场景可以用读写锁(也叫共享独占锁),来缓解。C++17引入了std::shared_mutex 。更多锁的种类可原创 2021-10-16 15:44:59 · 4015 阅读 · 0 评论 -
如何理解互斥锁、条件锁、读写锁以及自旋锁?
锁是一个常见的同步概念,我们都听说过加锁(lock)或者解锁(unlock),当然学术一点地说法是获取(acquire)和释放(release)。恰好pthread包含这几种锁的API,而C++11只包含其中的部分。接下来我将通过pthread的API来展开回答。mutex(互斥量)mutex(mutual exclusive)即互斥量(互斥体)。也便是常说的互斥锁。尽管名称不含lock,但是称之为锁,也是没有太大问题的。mutex无疑是最常见的多线程同步方式。其思想简单粗暴,多线程共享一原创 2021-10-16 15:42:35 · 1042 阅读 · 0 评论 -
C++后台实践:古老的CGI与Web开发
本文写给C/C++程序猿,也适合其他对历史感兴趣的程序猿。 谈到web开发,大家首先想到的PHP、JavaEE/JSP、.NET/ASP、Ruby on rails、Python的Django等等。可谓百花齐放,你一般不会想到C++和Web开发有什么关系,但其实动态网页的开发(web开发)可是在动态语言发明之前就存在的了。在天地初开,混沌未分之时,动态网页语言尚未出世,要实现动态网站依赖的就是CGI。谷歌/百度一下CGI,可能会出现很多名词:CGI脚本、CGI程序、CGI标准等等。其实这些都是站在不同角原创 2016-01-25 17:00:03 · 17878 阅读 · 3 评论