linux下C++的文件链接问题
发布网友
发布时间:2022-05-06 10:27
我来回答
共3个回答
热心网友
时间:2022-06-29 18:53
异常情景如下:
query1和query2使用同一个Connection进行query查询,设thread_1调用query1,thread_2调用query2,当两个线程不加*的时候,会出现串数据的情况。
即:query1读取到了query2的结果。
更严重,有可能导致mysql_query()抛出异常
解决办法,自阿query1(),query2()的入口和出口加上信号量semaphore,代码结构如下:
1、声明semaphore并初始化
sem_init(&sem,0,1);
第一个参数是信号量的指针,第二个参数可以设置为0表示不参与进程同步,第三个参数表示资源可用的数量(实际上semaphore可以理解为一个int量),这里第一次必须要能够查询只不过共享了唯一一个Connection,所以设置为1
2、对于query1()和query()2的改造。
如下:
void query1()
{
//等待信号量,当为1的时候,减为0,并继续执行;否则阻塞
sem_wait(&sem);
//执行mysql_query(...)
//释放信号量,信号量加1
sem_post()
}
query2的改造同query1()
经过了上面的改造,query1和query2就是线程安全的了,任何线程都可以不加*的调用这两个函数了!
3、性能下降
使用信号量同步一定会导致性能下降,下面是一些测试参数。
前提:query1和query2各查询10000次
没有使用信号量之前:
450000
使用了信号量之后
490000
还是可以接受的,毕竟换来了安全。
热心网友
时间:2022-06-29 18:54
方法有两种:
一、手动连接:
sh$ g++ -c twofile2.cpp
sh$ g++ -c twofile1.cpp
sh$ ls
twofile2.o twofile2.o
sh$ g++ twofile2.o twofile2.o -o mian
二、编写Makefile
这里我就不解释了,感兴趣自己去看
main:
g++ -c twofile2.cpp twofile1.cpp
g++ twofile2.o twofile2.o -o mian
rm twofile2.o twofile2.o
热心网友
时间:2022-06-29 18:54
方法有两种:
一、手动连接:
sh$ g++ -c twofile2.cpp
sh$ g++ -c twofile1.cpp
sh$ ls
twofile2.o twofile2.o
sh$ g++ twofile2.o twofile2.o -o mian
二、编写Makefile
这里我就不解释了,感兴趣自己去看
main:
g++ -c twofile2.cpp twofile1.cpp
g++ twofile2.o twofile2.o -o mian
rm twofile2.o twofile2.o追问前面几句我知道是编译以及查看文件,但是最后一句sh$ g++ twofile2.o twofile2.o -o mian是什么意思就看不怎么懂了,能帮忙解释一下么,linux和C++都是新手,谢谢~!
刚看了一下,你把两个都输入成twofile2.o了,只要把其中一个改成twofile1.o就好了,谢谢啦!