免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1152 | 回复: 1
打印 上一主题 下一主题

大家帮我解释一个问题 ,多线程的应用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-06 09:32 |只看该作者 |倒序浏览
下面的例子运行在Red Hat9和Oracle9上。程序目的是用两个线程同时往一个表里插10000条记录,每个线程都拥有自己的运行时上下文。

  1. #include<stdio.h>  

  2. #include<unistd.h>  

  3. #include<pthread.h> /* Linux线程库头文件 */  

  4. #include "sqlca.h" /* Oracle头文件 */  



  5. #define SQLCODE sqlca.sqlcode  



  6. static int insert_data( sql_context );  

  7. static int start();  



  8. int  

  9. main()  

  10. {  

  11. pthread_t tid1, tid2;  



  12. /* 创建两个线程 */  

  13. if( pthread_create( &tid1,NULL,(void *)start,NULL ) ){  

  14. printf( "创建线程失败!\n" );  

  15. exit(1);  

  16. }  

  17. if( pthread_create( &tid2,NULL,(void *)start,NULL ) ){  

  18. printf( "创建线程失败!\n" );  

  19. exit(1);  

  20. }  



  21. /* 等待线程退出 */  

  22. if( pthread_join( tid1,NULL ) ){  

  23. printf( "等待线程结束失败!\n" );  

  24. exit(1);  

  25. }  

  26. if( pthread_join( tid2,NULL ) ){  

  27. printf( "等待线程结束失败!\n" );  

  28. exit(1);  

  29. }  

  30. exit(0);  

  31. }  



  32. int  

  33. start()  

  34. {  

  35. sql_context context;  

  36. struct sqlca sqlca; /* 需要在此定义一个局部的sqlca */  

  37. char uid[] = "dev/888888";  



  38. /* 以下SQL语句的执行顺序不能更改 */  

  39. EXEC SQL ENABLE THREADS;  

  40. EXEC SQL CONTEXT ALLOCATE :context;  

  41. EXEC SQL CONTEXT USE :context;  



  42. EXEC SQL CONNECT :uid;  

  43. if( SQLCODE < 0 ){  

  44. printf( "创建数据库连接失败,%d:%s\n", SQLCODE,sqlca.sqlerrm.sqlerrmc);  

  45. return -1;  

  46. }insert_data( context );  



  47. EXEC SQL COMMIT WORK RELEASE;  

  48. if( SQLCODE < 0 ){  

  49. printf( "断开数据库连接失败!%d:%s\n", SQLCODE,sqlca.sqlerrm.sqlerrmc );  

  50. return -1;  

  51. }  

  52. EXEC SQL CONTEXT FREE :context;  

  53. return 0;  

  54. }  





  55. static int  

  56. insert_data( context )  

  57. sql_context context;  

  58. {  

  59. struct sqlca sqlca; /* 需要在此定义一个局部的sqlca */  

  60. char name[11];  

  61. int age;  

  62. int i;  



  63. strcpy( name, "test" );  

  64. age = 20;  



  65. EXEC SQL CONTEXT USE :context; /* 指定执行SQL语句的上下文 */  

  66. for( i=0; i<10000; i++ ){  

  67. EXEC SQL INSERT INTO table1 VALUES ( :name, :age );  

  68. if( SQLCODE < 0 ){  

  69. printf( "插入纪录失败!%d:%s\n", SQLCODE, sqlca.sqlerrm.sqlerrmc );  

  70. return -1;  

  71. }  

  72. }  

  73. return 0;  

  74. }

复制代码

帮忙解释一下,高手们,我对“上下文context”的意思还是不太了解

论坛徽章:
0
2 [报告]
发表于 2005-12-06 12:56 |只看该作者
难道是说每个线程都有一个独立的 sql_context context ?还有 EXEC SQL CONTEXT ALLOCATE :context;  ,在启用了 Oracle 的线程支持之后为每个线程设置 context?没用过 Oracle,字面猜测。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP