关于linux下多线程处理informix

jody_go 2012-06-21 09:59:49
我有如下测试程序,主函数中创建2个线程,
分别调用函数foo1和foo2,都向testtable表中写入数据,foo1,直接COMMIT,foo2睡眠一秒后,进行ROLLBACK,
可是为什么数据还是写入到testtable中了啊!
还有,就是多线程连接informix的时候,我想并发处理,该用什么办法诶?

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#include <pthread.h>


void *foo1(void* arg)
{
EXEC SQL BEGIN DECLARE SECTION;
char acc[10];
EXEC SQL END DECLARE SECTION;

strcat(acc, "yyy");

EXEC SQL set connection 'conn1';

EXEC SQL BEGIN WORK;

EXEC SQL
insert into testtable
values(:acc, 'N', 100);

EXEC SQL COMMIT WORK;
//EXEC SQL ROLLBACK WORK;
}

void *foo2(void* arg)
{
EXEC SQL BEGIN DECLARE SECTION;
char acc[10];
EXEC SQL END DECLARE SECTION;

strcat(acc, "xxx");

EXEC SQL set connection 'conn2';

EXEC SQL BEGIN WORK;

sleep(1);

EXEC SQL
insert into testtable
values(:acc, 'M', 200);

//EXEC SQL COMMIT WORK;
EXEC SQL ROLLBACK WORK;
}

int main()
{
pthread_t tid[10];

EXEC SQL CONNECT TO "root@ol_informix1170" as "conn1";
EXEC SQL CONNECT TO "root@ol_informix1170" as "conn2";

pthread_create(&tid[0], NULL, foo1, NULL);
pthread_create(&tid[1], NULL, foo2, NULL);

pthread_join(tid[0], NULL);
pthread_join(tid[1], NULL);

EXEC SQL DISCONNECT "conn1";
EXEC SQL DISCONNECT "conn2";

return 0;
}


...全文
372 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jody_go 2012-06-22
  • 打赏
  • 举报
回复
都没有人啊!!!

1,195

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 Informix
社区管理员
  • Informix社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧