Comments (4)
这一块我也认为有问题,按道理来说调用phtread_cond_wait之前是需要调用pthread_mutex_lock来进行加锁的,而pthread_cond_wait调用在等待条件发生期间会阻塞线程并对mutex进行解锁操作,以避免忙等待问题;而作者最开始很明显也是加了锁的,后面不知道为什么给pthread_cond_wait的锁注释掉了,这不会导致线程安全问题和竞态条件吗?
from tinywebserver.
这一块我也认为有问题,按道理来说调用phtread_cond_wait之前是需要调用pthread_mutex_lock来进行加锁的,而pthread_cond_wait调用在等待条件发生期间会阻塞线程并对mutex进行解锁操作,以避免忙等待问题;而作者最开始很明显也是加了锁的,后面不知道为什么给pthread_cond_wait的锁注释掉了,这不会导致线程安全问题和竞态条件吗?
我也有同样的疑问,而且作者在庖丁解牛1中也说了要先加锁,实际代码确注释掉了,同学现在解决了这个问题嘛?
from tinywebserver.
这一块我也认为有问题,按道理来说调用phtread_cond_wait之前是需要调用pthread_mutex_lock来进行加锁的,而pthread_cond_wait调用在等待条件发生期间会阻塞线程并对mutex进行解锁操作,以避免忙等待问题;而作者最开始很明显也是加了锁的,后面不知道为什么给pthread_cond_wait的锁注释掉了,这不会导致线程安全问题和竞态条件吗?
我也有同样的疑问,而且作者在庖丁解牛1中也说了要先加锁,实际代码确注释掉了,同学现在解决了这个问题嘛?
嗯,我记得之前看到哪块代码调用了wait,并且那块逻辑需要加锁,为了避免在调用wait前加一次锁进入wait又加一次锁的双重锁死锁问题,所以作者把里面的锁给注释了。主要是这个普通的mutex不支持重复加锁,这一块的逻辑不是很严谨,但是应该作者为了代码易懂,所以没用高级锁
from tinywebserver.
这一块我也认为有问题,按道理来说调用phtread_cond_wait之前是需要调用pthread_mutex_lock来进行加锁的,而pthread_cond_wait调用在等待条件发生期间会阻塞线程并对mutex进行解锁操作,以避免忙等待问题;而作者最开始很明显也是加了锁的,后面不知道为什么给pthread_cond_wait的锁注释掉了,这不会导致线程安全问题和竞态条件吗?
我也有同样的疑问,而且作者在庖丁解牛1中也说了要先加锁,实际代码确注释掉了,同学现在解决了这个问题嘛?
嗯,我记得之前看到哪块代码调用了wait,并且那块逻辑需要加锁,为了避免在调用wait前加一次锁进入wait又加一次锁的双重锁死锁问题,所以作者把里面的锁给注释了。主要是这个普通的mutex不支持重复加锁,这一块的逻辑不是很严谨,但是应该作者为了代码易懂,所以没用高级锁
我也看到了,是这样的,多谢同学
from tinywebserver.
Related Issues (20)
- 能否支持Android 和 IOS运行
- 可以通过编译;执行./server后,无法访问页面。 HOT 2
- 日志文件中MySQL Error
- 压力测试 HOT 1
- 为什么我执行完 ./server 直接断开了,没有进入循环 HOT 2
- 【已解决】主状态机解析完消息体以后,m_checked_idx和m_start_line指向什么位置
- http_conn::close_conn成员是否会导致多次close同一个文件描述符?
- sql_connect_pool.cpp中的GetConnection函数的一个问题?
- 关于MySQL Error,我可能犯了一个最蠢的错误...
- /log/block_queue.h中的block_queue类中的 int max_size()函数为什么不能直接返回max_size,需要阻塞后再传递值? HOT 1
- 压测连接服务器失败
- 已解决!运行成功但是网页无法连接 HOT 2
- 线程池 threadpool<T>::run() 函数中,为什么要判断 request 非NULL? HOT 1
- 线程池 threadpool<T>::run() 函数中,为什么要判断 request 非NULL? HOT 1
- 各位大佬,这个可以在windows系统下运行成功吗
- 请问为什么WebServer::dealclinetdata函数ET,LT模式下不一样? HOT 1
- process_write的switch判断是不是有点问题
- 为什么不用驼峰命名法或者下划线分割法呢
- 无法进行压力测试,哪怕删除可执行webbench文件 HOT 1
- 浏览器访问时显示非法指令 (核心已转储) HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tinywebserver.