线程中使用strtok

strtok是thread unsafe的。一段典型的使用如下所示:

char string[] = "a string,of ,,tokens";
char* token = strtok(string," ,"); /*There are two delimiters here*/
while (token != NULL){
    printf("The token is:  %s\n", token);
    token = strtok(NULL," ,");
}

strtok( str_xxx, delimiters )最后一次执行后,所有线程中的strtok( NULL, delimiters )调用得到的值都将是str_xxx被split的结果,而无法得到各自线程的应有的结果。

linux平台的posix线程安全版本为strtok_r(),即reentrant strtok,通过增加参数,将token指针交给用户代码来存储。

windows平台则实现了线程安全版本的strtok()和strtok_s()。前者会为每个线程创建一个_tiddata结构,来存储每个线程各自的strtok()的token指针;后者则与strtok_r()一致。

一些常用的标准c函数,如使用全局seed的rand();又如在内部malloc buffer的strerror(int)等,都存在thread unsafe的问题,使用时要当心,以免埋下定时炸弹。

crazy

最近非常疯狂,工作时长记录不断的被刷新,最新的记录是从早点7点多到晚上12点多,经常忙了半天都顾不上倒杯水,或者是倒了水却忘记了喝,真的很可怕,到了难以置信的地步。

之前跟家里通电话,都会说很好很开心,即使忙,也会说不忙不累。但最近我实在是忍不住了,开始跟爸妈抱怨了,虽然描述时已经打了很多折,但还是会让他们着实担心的,真对不起,可毕竟我都没法振奋起精神跟他们讲话了,声音中都带着疲惫。。。

今天去照证件照,从照片上才发现自己都成了熊猫眼,眼袋跟眼睛一样大了,难怪近来前台mm看我的眼神都不自然了- -b,好心的摄影师帮我稍微ps了一下,并且没有额外收费@,@

睡觉的时间都不够别的也讲究不了那么多了,虽然每天还记得刷牙洗脸,但衣服是真的攒了太多没洗了,衣柜里的夏装都快被遍历完了,要是再不洗就得穿长袖了。。。

最近几周都在喊:下周不加班了。希望这个么梦想能早点实现。。。原来梦想可以这么简单。。