LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 933|回复: 1

C语言写的关于使用mysql时的同步问题

[复制链接]
发表于 2006-2-21 13:20:27 | 显示全部楼层 |阅读模式
我在DEBIAN linux下安装了 mysql,并些了一个用c语言写了一个接入并写进数据的小程序,代码如下,有两个线程,分别读和写入数据库,对待如何同步,可以采用信号量,互斥锁等,大家有没有很完善的程序可供参考。


  #include <mysql.h>
  #include <stdio.h>
  #include <pthread.h>
  
   
   MYSQL mysql;     
   MYSQL_RES *res;
   MYSQL_ROW row;
   char *query;
   int t,r;
   void Myupdate();
   void Myselect();

  
  int main()
{
        pthread_t thread1,thread2;
        int  iret1,iret2;
       
            mysql_init(&mysql);
   if (!mysql_real_connect(&mysql,"localhost", "test", "test", "test",0,NULL,0))
   {
       printf( "Error connecting to database: %s\n",mysql_error(&mysql));
   }
   else printf("Connected...\n");
   
    iret1= pthread_create( &thread1, NULL, Myupdate, NULL);
    iret2= pthread_create( &thread2, NULL, Myselect, NULL);
    pthread_join( thread1, NULL);
    pthread_join( thread2, NULL);
        mysql_close(&mysql);
    return 0;
}

void Myselect()
{
         query = "select * from ttable";
   
t = mysql_real_query(&mysql,query,(unsigned int) strlen(query));
if (t)
{
    printf("Error making query: %s\n",
      mysql_error(&mysql));
}
else printf("[%s] made...\n", query);
res = mysql_store_result(&mysql);
while(row = mysql_fetch_row(res))
{
  for(t=0;t<mysql_num_fields(res);t++)
  {
   printf("%s ",row[t]);
  }
  printf("\n");
}
printf("mysql_free_result...\n");
mysql_free_result(res);  

sleep(1);   
}


void Myupdate()
{int x;
        for(x=0;x<4;x++)
        {
query = "insert into ttable(id, value) values(1, 'thread1')";
t = mysql_real_query(&mysql,query,(unsigned int) strlen(query));
if (t)
{
    printf("Error making query: %s\n",
      mysql_error(&mysql));
}
else printf("[%s] made...\n", query);
}

}
 楼主| 发表于 2006-2-21 19:15:59 | 显示全部楼层
写了一个程序,麻烦大家看看有些什么不成熟的地方

  #include <mysql.h>
  #include <stdio.h>
  #include <pthread.h>
  #include <unistd.h>
  
   MYSQL mysql;     
   MYSQL_RES *res;
   MYSQL_ROW row;
   char *query;
   int t,r;
   pthread_mutex_t my_mutex;
   pthread_mutex_init(my_mutex);
   void Myupdate();
   void Myupdate2();
   void Myselect();

  
  int main()
{
        pthread_t thread1,thread3,thread2;
        int  iret1,iret2,iret3;
       
            mysql_init(&mysql);
   if (!mysql_real_connect(&mysql,"localhost", "test", "test", "test",0,NULL,0))
   {
       printf( "Error connecting to database: %s\n",mysql_error(&mysql));
   }
   else printf("Connected...\n");
   
    iret1= pthread_create( &thread1, NULL, Myupdate, NULL);
    iret2= pthread_create( &thread2, NULL, Myupdate2, NULL);
    iret3= pthread_create( &thread3, NULL, Myselect, NULL);
    pthread_join( thread1, NULL);
    pthread_join( thread2, NULL);
    pthread_join( thread3, NULL);
        mysql_close(&mysql);
    return 0;
}

void Myselect()
{  pthread_mutex_lock(&my_mutex);
         query = "select * from ttable";
   
t = mysql_real_query(&mysql,query,(unsigned int) strlen(query));
if (t)
{
    printf("Error making query: %s\n",
      mysql_error(&mysql));
}
else printf("[%s] made...\n", query);
res = mysql_store_result(&mysql);
while(row = mysql_fetch_row(res))
{
  for(t=0;t<mysql_num_fields(res);t++)
  {
   printf("%s ",row[t]);
  }
  printf("\n");
}
printf("mysql_free_result...\n");
pthread_mutex_unlock(&my_mutex);
mysql_free_result(res);  

}


void Myupdate()
{  
        int x;
        for(x=0;x<10;x++)
        {
                pthread_mutex_lock(&my_mutex);
query = "insert into ttable(id, value) values(1, 'Update from thread 1')";
t = mysql_real_query(&mysql,query,(unsigned int) strlen(query));
if (t)
{
    printf("Error making query: %s\n",
      mysql_error(&mysql));
}
else printf("[%s] made...\n", query);
           pthread_mutex_unlock(&my_mutex);
}

}

void Myupdate2()
{
        int x;
        for(x=0;x<10;x++)
        { pthread_mutex_lock(&my_mutex);
query = "insert into ttable(id, value) values(2, 'Update from thread 2')";
t = mysql_real_query(&mysql,query,(unsigned int) strlen(query));
if (t)
{
    printf("Error making query: %s\n",
      mysql_error(&mysql));
}
else printf("[%s] made...\n", query);
          pthread_mutex_unlock(&my_mutex);
}
  
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表