基于glibc-2.11.2的thread_barrier_wait研究

本文详细分析了glibc-2.11.2中pthread_barrier_wait的实现,包括其内部的锁机制、线程同步及futex操作。通过代码解读,解释了在多线程环境下如何处理barrier等待,特别是当线程在barrier处等待、唤醒以及其他线程试图进入下一个barrier时的情况。

最近调的一个程序老在pthread_barrier_wait的futex(.., FUTEX_WAIT, ...)处死锁,于是找来glibc的源代码,结合调试,研究了一把这个函数,下面谈谈我的理解。

 

 


 

图1. pthread_barrier_wait的基本代码

 

图2. pthread_barrier_wait真正实现

 

glibc的pthread_barrier_wait其实在../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_barrier_wait.S:31用汇编实现的,但是要表达的意思跟../nptl/pthread_barrier_wait.C的C语言实现一个样。

假设程序有4个线程,设有两个barrier。

首先对barrier的操作用mutex保护起来,如图1第9行所示,使用了ibarrier->lock这个整数当mutex。

结构体指针barrier指向的结构体如下所示

 

struct pthread_barrier

{

  unsigned int curr_event;

  int lock;

  unsigned int left;

  unsigned int init_count;

  int private;

}

在pthread_barrier_init中初始化成了

 

{curr_event = 0, lock = 0, left = 4, init_count = 4, private = 128}

 

 

在第一个barrier处,假设线程T1, T2, T3, T4按照先后顺序执行了pthread_barrier_wait,且在第一个barrier处没有两个线程同时等待在lock处,因此T1, T2, T3在获取了lock后,把left--然后释放lock进入futex(&curr_event, FUTEX_WAIT_PRIVATE /*==128*/, 0, NULL)睡眠,T4在获取lock把left--后,发现left为0了,因此执行futex(&cur_event, FUTEX_WAKE_PRIVATE /*129*/, 0x7FFFFFFF)唤醒T1, T2, T3, T4,在这之前把++cur_event,以便下次进入barrier与这次区分,T4返回PTHREAD_BARRIER_SERIAL_THREAD == -1,其他线程返回0,注意到T4还没有释放lock,而这个lock是用最后一个离开barrier的线程释放的,如图1第42所示,每个线程在离开barrier时会把left++,如图1第40行所示。

假设还有线程没有退出第一个barrier,因此lock == 1,这时退出的线程在进入第二个barrier时由图2的第16行->121->__lll_lock_wait(../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/lowlevellock.S, line 123.)。__lll_lock_wait如图3所示

 

图3. __lll_lock_wait代码

 

假设T2, T3, T4都离开了第一个barrier,T1还没有离开一个barrier,barrier的要求就是在所有的线程离开上一个barrier后才能进入下一个barrier,因此T2, T3, T4沿着上面的路径进入__lll_lock_wait并lock设为2,然后futex(&lock, 128, 2, NULL)进入睡眠。

这时T1要离开了第一个barrier了,在把lock--后,如图2第68行,发现lock不为0,因此69行->135行->__lll_unlock_wake。

(如果是T4最后一个离开第一个barrier则为110行->123行->__lll_unlock_wake。总之都是进入了__lll_unlock_wake。)我们发现133行也有一个__lll_unlock_wake,它的进入路径为33行->130行->__lll_unlock_wake,这在什么情况下发生呢?

请看下面分析。

 

图4. __lll_unlock_wake代码

 

 

 

__lll_unlock_wake在../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/lowlevellock.S, line 363,如途所示,

唤醒其他线程前把lock设为了0,图4第17行,然后futex(&lock, 129, 1)唤醒一个线程。醒来的线程沿着图2第122行->19行->33行->130行->__lll_unlock_wake继续唤醒下一个线程。

可以得出下面结论:

1)进入图2的9:的是在这个barrier执行了futex(&curr_event, FUTEX_WAIT_PRIVATE /*==128*/, 0, NULL),退出时发现有线程试图进入下一个barrier而在lock上进入睡眠,因而去唤醒其中的一个线程。

2)进入图2的4:的是在这barrier执行了futex(&cur_event, FUTEX_WAKE_PRIVATE /*129*/, 0x7FFFFFFF),退出时发现有线程试图进入下一个barrier而在lock上进入睡眠,因而去唤醒其中的一个线程。

3)进入图2的6:的是试图进入barrier而发现还有线程没有结束上个barrier而在lock进入睡眠的线程被唤醒后再去唤醒其他的在lock上睡眠的线程。或者是试图进入第一个barrier获取lock后,发现有试图进入这个barrier而在lock上睡眠的线程,因而要去唤醒睡眠的线程。这里回答了上面的问题,也就是说,在获取lock执行一系列操作,然后在释放lock时发现有在lock上睡眠的线程,因此进入6。

 

这三类线程回跳的地址有很大的差别,因为1)2)还没有结束第一个barrier,而3)已经结束了第一个barrier,1)为在curr_event上睡眠的线程,而2)为唤醒所有的在curr_event上睡眠的线程,两者要求的返回值不同。因此

1)回跳到10:,返回0

2)回跳到5:,返回-1

3)回跳到7:,在curr_event上进入睡眠。

 

 

 

 

mysql-5.7.41-linux-glibc2.12-x86_64/bin/myisam_ftdump mysql-5.7.41-linux-glibc2.12-x86_64/bin/myisamchk mysql-5.7.41-linux-glibc2.12-x86_64/bin/myisamlog mysql-5.7.41-linux-glibc2.12-x86_64/bin/myisampack mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysql mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysql_client_test_embedded mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysql_config_editor mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysql_embedded mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysql_install_db mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysql_plugin mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysql_secure_installation mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysql_ssl_rsa_setup mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysql_tzinfo_to_sql mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysql_upgrade mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqladmin mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqlbinlog mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqlcheck mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqldump mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqlimport mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqlpump mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqlshow mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqlslap mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqltest_embedded mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqlxtest mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqld-debug mysql-5.7.41-linux-glibc2.12-x86_64/lib/libmysqld-debug.a mysql-5.7.41-linux-glibc2.12-x86_64/include/mysqlx_ername.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysqlx_error.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysqlx_version.h mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysql_config mysql-5.7.41-linux-glibc2.12-x86_64/include/big_endian.h mysql-5.7.41-linux-glibc2.12-x86_64/include/binary_log_types.h mysql-5.7.41-linux-glibc2.12-x86_64/include/byte_order_generic.h mysql-5.7.41-linux-glibc2.12-x86_64/include/byte_order_generic_x86.h mysql-5.7.41-linux-glibc2.12-x86_64/include/decimal.h mysql-5.7.41-linux-glibc2.12-x86_64/include/errmsg.h mysql-5.7.41-linux-glibc2.12-x86_64/include/keycache.h mysql-5.7.41-linux-glibc2.12-x86_64/include/little_endian.h mysql-5.7.41-linux-glibc2.12-x86_64/include/m_ctype.h mysql-5.7.41-linux-glibc2.12-x86_64/include/m_string.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_alloc.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_byteorder.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_command.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_compiler.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_config.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_dbug.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_dir.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_getopt.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_global.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_list.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_sys.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_thread.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_thread_local.h mysql-5.7.41-linux-glibc2.12-x86_64/include/my_xml.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/client_authentication.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/client_plugin.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/client_plugin.h.pp mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/com_data.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/get_password.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/group_replication_priv.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/innodb_priv.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/mysql_lex_string.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin_audit.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin_audit.h.pp mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin_auth.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin_auth.h.pp mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin_auth_common.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin_ftparser.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin_ftparser.h.pp mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin_group_replication.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin_keyring.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin_keyring.h.pp mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin_trace.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/plugin_validate_password.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/mysql_file.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/mysql_idle.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/mysql_mdl.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/mysql_memory.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/mysql_ps.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/mysql_socket.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/mysql_sp.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/mysql_stage.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/mysql_statement.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/mysql_table.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/mysql_thread.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/mysql_transaction.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/psi.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/psi_base.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/psi/psi_memory.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_command.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_locking.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_my_plugin_log.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_my_snprintf.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_mysql_alloc.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_mysql_keyring.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_mysql_password_policy.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_mysql_string.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_parser.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_rpl_transaction_ctx.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_rpl_transaction_write_set.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_rules_table.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_security_context.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_srv_session.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_srv_session_info.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_ssl_wrapper.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_thd_alloc.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_thd_engine_lock.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_thd_wait.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/service_thread_scheduler.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/services.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/services.h.pp mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/thread_pool_priv.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql/thread_type.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql_com.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql_com_server.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql_embed.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql_time.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysql_version.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysqld_ername.h mysql-5.7.41-linux-glibc2.12-x86_64/include/mysqld_error.h mysql-5.7.41-linux-glibc2.12-x86_64/include/plugin.h mysql-5.7.41-linux-glibc2.12-x86_64/include/plugin_audit.h mysql-5.7.41-linux-glibc2.12-x86_64/include/plugin_ftparser.h mysql-5.7.41-linux-glibc2.12-x86_64/include/plugin_group_replication.h mysql-5.7.41-linux-glibc2.12-x86_64/include/plugin_keyring.h mysql-5.7.41-linux-glibc2.12-x86_64/include/plugin_validate_password.h mysql-5.7.41-linux-glibc2.12-x86_64/include/sql_common.h mysql-5.7.41-linux-glibc2.12-x86_64/include/sql_state.h mysql-5.7.41-linux-glibc2.12-x86_64/include/sslopt-case.h mysql-5.7.41-linux-glibc2.12-x86_64/include/sslopt-longopts.h mysql-5.7.41-linux-glibc2.12-x86_64/include/sslopt-vars.h mysql-5.7.41-linux-glibc2.12-x86_64/include/thr_cond.h mysql-5.7.41-linux-glibc2.12-x86_64/include/thr_mutex.h mysql-5.7.41-linux-glibc2.12-x86_64/include/thr_rwlock.h mysql-5.7.41-linux-glibc2.12-x86_64/include/typelib.h mysql-5.7.41-linux-glibc2.12-x86_64/lib/libmysqlclient.a mysql-5.7.41-linux-glibc2.12-x86_64/lib/libmysqlservices.a mysql-5.7.41-linux-glibc2.12-x86_64/lib/pkgconfig/mysqlclient.pc mysql-5.7.41-linux-glibc2.12-x86_64/share/aclocal/mysql.m4 mysql-5.7.41-linux-glibc2.12-x86_64/docs/ChangeLog mysql-5.7.41-linux-glibc2.12-x86_64/docs/INFO_SRC mysql-5.7.41-linux-glibc2.12-x86_64/lib/libmysqld.a mysql-5.7.41-linux-glibc2.12-x86_64/docs/INFO_BIN mysql-5.7.41-linux-glibc2.12-x86_64/docs/INFO_SRC mysql-5.7.41-linux-glibc2.12-x86_64/docs/mysql.info mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/comp_err.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/innochecksum.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/lz4_decompress.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/my_print_defaults.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/myisam_ftdump.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/myisamchk.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/myisamlog.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/myisampack.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysql.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysql.server.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysql_config.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysql_config_editor.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysql_install_db.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysql_plugin.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysql_secure_installation.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysql_ssl_rsa_setup.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysql_tzinfo_to_sql.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysql_upgrade.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysqladmin.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysqlbinlog.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysqlcheck.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysqld_multi.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysqld_safe.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysqldump.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysqldumpslow.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysqlimport.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysqlman.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysqlpump.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysqlshow.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/mysqlslap.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/perror.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/replace.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/resolve_stack_dump.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/resolveip.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man1/zlib_decompress.1 mysql-5.7.41-linux-glibc2.12-x86_64/man/man8/mysqld.8 mysql-5.7.41-linux-glibc2.12-x86_64/LICENSE mysql-5.7.41-linux-glibc2.12-x86_64/README mysql-5.7.41-linux-glibc2.12-x86_64/bin/innochecksum mysql-5.7.41-linux-glibc2.12-x86_64/bin/lz4_decompress mysql-5.7.41-linux-glibc2.12-x86_64/bin/my_print_defaults mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqld mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqld_multi mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqld_safe mysql-5.7.41-linux-glibc2.12-x86_64/bin/mysqldumpslow mysql-5.7.41-linux-glibc2.12-x86_64/bin/perror mysql-5.7.41-linux-glibc2.12-x86_64/bin/replace mysql-5.7.41-linux-glibc2.12-x86_64/bin/resolve_stack_dump mysql-5.7.41-linux-glibc2.12-x86_64/bin/resolveip mysql-5.7.41-linux-glibc2.12-x86_64/bin/zlib_decompress mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_euc-jp/char.bin mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_euc-jp/dicrc mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_euc-jp/left-id.def mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_euc-jp/matrix.bin mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_euc-jp/pos-id.def mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_euc-jp/rewrite.def mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_euc-jp/right-id.def mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_euc-jp/sys.dic mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_euc-jp/unk.dic mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_sjis/char.bin mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_sjis/dicrc mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_sjis/left-id.def mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_sjis/matrix.bin mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_sjis/pos-id.def mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_sjis/rewrite.def mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_sjis/right-id.def mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_sjis/sys.dic mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_sjis/unk.dic mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_utf-8/char.bin mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_utf-8/dicrc mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_utf-8/left-id.def mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_utf-8/matrix.bin mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_utf-8/pos-id.def mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_utf-8/rewrite.def mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_utf-8/right-id.def mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_utf-8/sys.dic mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/dic/ipadic_utf-8/unk.dic mysql-5.7.41-linux-glibc2.12-x86_64/lib/mecab/etc/mecabrc mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/adt_null.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/auth_socket.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/authentication_ldap_sasl_client.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/connection_control.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/adt_null.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/auth_socket.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/authentication_ldap_sasl_client.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/connection_control.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/group_replication.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/ha_example.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/innodb_engine.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/keyring_file.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/keyring_udf.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libmemcached.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libpluginmecab.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_framework.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_services.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_services_threaded.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_session_detach.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_session_in_thd.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_session_info.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_2_sessions.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_all_col_types.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_cmds_1.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_commit.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_complex.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_errors.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_lock.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_processlist.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_replication.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_shutdown.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_sqlmode.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_stored_procedures_functions.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_sql_views_triggers.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_x_sessions_deinit.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/libtest_x_sessions_init.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/locking_service.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/mypluglib.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/mysql_no_login.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/mysqlx.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/rewrite_example.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/rewriter.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/semisync_master.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/semisync_slave.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/test_security_context.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/test_udf_services.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/validate_password.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/debug/version_token.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/group_replication.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/ha_example.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/innodb_engine.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/keyring_file.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/keyring_udf.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libmemcached.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libpluginmecab.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_framework.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_services.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_services_threaded.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_session_detach.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_session_in_thd.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_session_info.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_2_sessions.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_all_col_types.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_cmds_1.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_commit.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_complex.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_errors.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_lock.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_processlist.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_replication.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_shutdown.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_sqlmode.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_stored_procedures_functions.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_sql_views_triggers.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_x_sessions_deinit.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/libtest_x_sessions_init.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/locking_service.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/mypluglib.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/mysql_no_login.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/mysqlx.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/rewrite_example.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/rewriter.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/semisync_master.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/semisync_slave.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/test_security_context.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/test_udf_services.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/validate_password.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/plugin/version_token.so mysql-5.7.41-linux-glibc2.12-x86_64/share/bulgarian/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/Index.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/README mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/armscii8.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/ascii.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/cp1250.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/cp1251.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/cp1256.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/cp1257.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/cp850.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/cp852.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/cp866.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/dec8.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/geostd8.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/greek.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/hebrew.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/hp8.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/keybcs2.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/koi8r.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/koi8u.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/latin1.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/latin2.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/latin5.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/latin7.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/macce.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/macroman.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/charsets/swe7.xml mysql-5.7.41-linux-glibc2.12-x86_64/share/czech/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/danish/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/dictionary.txt mysql-5.7.41-linux-glibc2.12-x86_64/share/dutch/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/english/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/errmsg-utf8.txt mysql-5.7.41-linux-glibc2.12-x86_64/share/estonian/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/fill_help_tables.sql mysql-5.7.41-linux-glibc2.12-x86_64/share/french/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/german/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/greek/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/hungarian/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/innodb_memcached_config.sql mysql-5.7.41-linux-glibc2.12-x86_64/share/italian/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/japanese/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/korean/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/mysql_security_commands.sql mysql-5.7.41-linux-glibc2.12-x86_64/share/mysql_sys_schema.sql mysql-5.7.41-linux-glibc2.12-x86_64/share/mysql_system_tables.sql mysql-5.7.41-linux-glibc2.12-x86_64/share/mysql_system_tables_data.sql mysql-5.7.41-linux-glibc2.12-x86_64/share/mysql_test_data_timezone.sql mysql-5.7.41-linux-glibc2.12-x86_64/share/norwegian-ny/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/norwegian/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/polish/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/portuguese/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/romanian/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/russian/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/serbian/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/slovak/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/spanish/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/swedish/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/share/ukrainian/errmsg.sys mysql-5.7.41-linux-glibc2.12-x86_64/support-files/mysql-log-rotate mysql-5.7.41-linux-glibc2.12-x86_64/support-files/mysqld_multi.server mysql-5.7.41-linux-glibc2.12-x86_64/lib/libmysqlclient.so mysql-5.7.41-linux-glibc2.12-x86_64/lib/libmysqlclient.so.20 mysql-5.7.41-linux-glibc2.12-x86_64/lib/libmysqlclient.so.20.3.28 mysql-5.7.41-linux-glibc2.12-x86_64/share/install_rewriter.sql mysql-5.7.41-linux-glibc2.12-x86_64/share/uninstall_rewriter.sql mysql-5.7.41-linux-glibc2.12-x86_64/support-files/magic mysql-5.7.41-linux-glibc2.12-x86_64/support-files/mysql.server
最新发布
06-24
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值