发现不需要互斥,需要共享,最后发现需要Rc<RefCell<Vec>>>。就是说在我这个需求中不存在一个函数正在修改一个vector的时候,还没做完,另一个函数来访问这个vector。我的需求只是一个函数访问vector,结束后,主动放弃,然后另一个再处理同一个vector。
因为这个程序本质是单线程的,类似于一个网站服务器,处理http请求,返回一个页面,写着Hello <n>,这里n是该请求接到时的内部的一个变量的值。这个变量要求每秒钟加1。一个方案是这个单线程程序有一个消息队列。在队列中插入一个未来一秒种后做的任务,如果有外界请求,则立即处理,返回页面。否则就等到一秒种到之后,把变量n加1,然后生成新的未来任务插入队列。
另一个方案是我说的Task::local一个循环,里面每隔一秒种给变量n加1。这里就需要Rc<RefCell<u64>>即可。
【 在 cutepig 的大作中提到: 】
: coroutine就是用户态多线程吧,本质上也是需要多线程定那一套来实现互斥。如果用tokio,框架有提供mutex,而不要用std的那一套
--
修改:bihai FROM 72.199.121.*
FROM 72.199.121.*