2.8.5. MIT-pthreads注意事项

这节描述使用MIT-pthreads时所涉及的一些问题。

Linux上,应该不使用MIT-pthreads而是安装LinuxThreads!参见2.12.1节,“Linux注意事项”

如果你的系统不提供原生的线程支持,将需要使用MIT-pthreads包构造MySQL。这包括大多数FreeBSD系统、SunOS 4.xSolaris 2.4和更早版本及其它,参见2.1.1节,“MySQL支持的操作系统”

MIT-pthreads不是MySQL 5.1源码分发版的一部分。如果你需要该安装包,需要单独从http://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz下载。

下载后,将源文件提取到MySQL源码目录的顶级目录。将创建新的mit-pthreads子目录。

  • 在大多数系统上,你能通过使用configure并用--with-mit-threads选项来强迫运行MIT-pthreads
  • shell> ./configure -- with-mit-threads

当使用MIT-pthreads时,不支持在一个非源码目录构造,因为我们想要使我们对代码的改变减到最小。

·         决定是否使用MIT-pthreads的检查仅在处理服务器代码的配置过程期间发生。如果已经用--without-server配置了分发版并只构造客户端代码,客户端将不知道MIT-pthreads是否正在被使用并且是否使用 默认的Unix套接字连接。因为在某些平台上Unix套接字文件不能在MIT-pthreads下面工作,这意味着当你运行客户端程序时,你需要使用-h--host

·         当使用MIT-pthreads编译MySQL时,因为性能原因,系统锁定 默认为禁止使用。你可以用--external-locking选项告诉服务器使用系统锁定。只是在相同数据文件上运行两个MySQL服务器时采需要,因此不推荐。

  • 有时pthreadbind()命令不能绑定一个套接字但没有任何错误消息(至少在Solaris),结果是所有到服务器的连接均失败。例如:
  • shell> mysqladmin version
  • mysqladmin: connect to server at '' failed;
  • error: 'Can't connect to mysql server on localhost (146)'

解决它的方法是杀死mysqld服务器并且重启它。这只有当我们强迫服务器停止并马上进行重启时在发生。

  • 使用MIT-pthreads,不能用SIGINTbreak)中断sleep()系统调用。这只有在运行mysqladmin --sleep时才能注意到。在中断起作用并且进程停止之前必须等待sleep()终止。
  • 当链接时,你可能会收到这样的警告消息(至少在Solaris);它们可以被忽视:
  • ld: warning: symbol `_iob' has differing sizes:
  •     (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
  • file /usr/lib/libc.so value=0x140);
  •     /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
  • ld: warning: symbol `__iob' has differing sizes:
  •     (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
  • file /usr/lib/libc.so value=0x140);
  •     /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken

 

  • 一些其它的警告也可被忽略:
  • implicit declaration of function `int strtoll(...)'
  • implicit declaration of function `int strtoul(...)'
  • 我们还没有让readlineMIT-pthreads上工作。(这不需要,但是可能某些人会感兴趣。)
关注编程学问公众号