mengning/nezha — pull request #1 by qinpeixi (2012-12-25 14:32:02+00:00)
Title: 很奇怪，不给server端的DBCreate加互斥锁也没问题

为了测试不加互斥锁的不一致问题，我在dbapi.c的 DBCreate函数中的tcmdbget 和 tcmdbput 之间加了
=====
if (opendb->counter == 2)
sleep(10);
=====
也就是，如果当前线程是第二个访问该数据库的，就睡眠10秒，然后再把opendb放回数据库。测试时，在不加互斥锁的情况下，同时开4个 nezhaclient ，在10秒内进行第二、三、四次访问，这三次得到的counter都是2,三个客户端都会睡眠10秒。所以，按理说这三次都是把counter=2送回了数据库。但神奇的是，在依次关闭这些数据库时，在DBDelete中取到的counter竟然是已经互斥了的效果！怎么会这样呢？难道TC自动更改了存进去的值？但是opendb是一个自定义的结构体啊，传到TC里就是8个字节，它怎么能刚好把int这一部分的变更合并起来呢？