我是一名大学生,正在学习如何处理线程和数据库。
总的来说,我正在尝试创建一个将获取锁列表的函数,查看程序正在处理的当前锁是否在列表中,并对该锁进行互斥锁。
当前,我在初始化* locks时遇到问题,但是每次这样做,都会遇到分段错误(核心转储)。
我已经尝试使用不同的方式来初始化互斥锁:
auth
以及使用:&locks->lock = pthREAD_MUTEX_INITIALIZER;
包含
pthread_mutex_init(&locks->lock,NULL);
主文件:
typedef struct {
char *table;
pthrad_mutex_t lock;} TableLock;
my_realloc函数是这样的:
static pthread_mutex_t lock_on_locks;
static int active_tables = 0;
static TableLock *locks = NULL;
// Table locking functions
void sudba_lock(char *table) {
sleep(2);
if (locks == NULL) {
my_realloc(locks,sizeof(TableLock));
}
pthread_mutex_lock(&lock_on_locks);
char table_name[strlen(table) + 1];
table_name[strlen(table)] = '\0';
sprintf(table_name,"%s",table);
if (active_tables == 0) {
pthread_mutex_init(&locks->lock,NULL);
pthread_mutex_lock(&locks->lock);
locks[active_tables].table = table_name;
active_tables++;
}
感谢您的帮助