1. 程式人生 > 實用技巧 >鎖和資料打包

鎖和資料打包

#include "common.h"

static pthread_t  thread_miccapture;
static pthread_t  thread_audioplay;
static int pthread_run = 0;
static pthread_t  thread_main;
static char* pusb_confi ;
static float i2c_buf = 0;


typedef  struct  mutex_lock_tag      // 後面加tag 
{
    pthread_mutex_t  mutex;
    int data;
}mutex_lock_t;    
// 後面加_t static mutex_lock_t data = { .mutex = PTHREAD_MUTEX_INITIALIZER, .data =10 // 需要保護的資料 }; static void * mic_capture_thread(void *arg); static void * audio_play_thread(void *arg); static void * mic_capture_thread(void *arg) { int ret = pthread_equal(thread_main,thread_miccapture);
if(ret > 0) { printf("two the same thread\n"); } else { printf("diff in two thread\n"); } while(pthread_run) { pthread_mutex_lock(&data.mutex); data.data = 10; pthread_mutex_unlock(&data.mutex); printf(
"mutex is %d\n",data.data); usleep(100000); } } static void * audio_play_thread(void *arg) { int read_status = 1; int ret = 0; while(pthread_run) { if(read_status) { //if(ret) { pthread_mutex_lock(&data.mutex); data.data = 11; pthread_mutex_unlock(&data.mutex); printf("data.data is %d\n",data.data); usleep(100000); } } } } void task_create(void) { char* tmp[10] = { 0}; int ret = -1; pthread_run = 1; //do { //ret = pthread_mutex_init(&mutex,NULL); // 新增初始化鎖 printf("ret is %d\n",ret); ret = pthread_create(&thread_miccapture, NULL, mic_capture_thread, NULL); if(ret<0) { perror("pthread_create failure\n"); return ; } ret = pthread_create(&thread_audioplay, NULL, audio_play_thread, NULL); if(ret<0) { perror("pthread_create failure\n"); return ; } pthread_join(thread_miccapture,NULL); pthread_join(thread_audioplay,NULL); pthread_mutex_destroy(&data.mutex); } }

(1) typedef struct 結構體命名 : 用tag
typedef 型別用_t
typedef struct mutex_lock_tag // 後面加tag
{
pthread_mutex_t mutex;
int data;
}mutex_lock_t; // 後面加_t


static mutex_lock_t data = {
.mutex = PTHREAD_MUTEX_INITIALIZER,
.data =10 // 需要保護的資料
};
(2)用結構體打包需要的同步的資料 ,用意明確..