• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 1. MySQL Connector / ODBC
    2. MySQL Connector/Net
    3. MySQL Connector/J
    4. MySQL Connector/C++
    5. MySQL Connector/C
    6. MySQL Connector/Python
    7. libmysqld, the Embedded MySQL Server Library
    8. MySQL C API
    1. MySQL C API 구현
    2. MySQL Server MySQL Connector/C 동시 설치
    3. C API 클라이언트 프로그램 예제
    4. Building and Running C API Client Programs
    1. C API 클라이언트 프로그램 구축
    2. C API Threaded Client Program 작성
    3. Running C API Client Programs
    4. C API Server and Client Library Versions
    5. C API Data 구조
    6. C API Function 개요
    7. C API Function 설명
    8. C API Prepared Statements
    9. C API Prepared Statement Data 구조
    10. C API Prepared Statement 함수 개요
    11. C API Prepared Statement 함수 설명
    12. C API Threaded 함수 설명
    13. C API 임베디드 서버 함수 설명
    14. C API Client Plugin 함수
    15. C API를 사용하는 경우 일반적인 질문과 문제
    16. 자동 재 연결 동작 제어
    17. 여러 명령문 실행 C API 지원
    18. C API Prepared Statement 문제
    19. C API Prepared Statement date 및 time 값 처리
    20. C API의 Prepared CALL Statements 지원
    9. MySQL PHP API
    10. MySQL Perl API
    11. MySQL Python API
    12. MySQL Ruby APIs
    13. MySQL Tcl API
    14. MySQL Eiffel Wrapper
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

23.8.4.2 C API Threaded Client Program 작성

클라이언트 라이브러리는 대부분 스레드로부터 안전합니다. 가장 큰 문제는 소켓에서 읽을 net.c 의 서브 루틴이 인터럽트 안전 (interrupt-safe)하지 않은 것입니다. 이것은 서버에 긴 읽기를 중단 할 수있는 독자적인 알람을 필요로 할 가능성이 있다는 생각으로 바뀌 었습니다. SIGPIPE 인터럽트의 인터럽트 핸들러를 설치하는 경우 소켓 처리는 스레드로부터 안전해야합니다.

연결 종료시 프로그램의 중단을 방지하기 위해 MySQL은 mysql_library_init() , mysql_init() 또는 mysql_connect() 에 대한 첫 번째 호출에서 SIGPIPE 를 차단합니다. 자신의 SIGPIPE 핸들러를 사용하려면 우선 mysql_library_init() 를 호출하고 나서 핸들러를 설치합니다.

libmysqlclient 클라이언트 라이브러리에 링크 할 때 "정의되지 않은 기호"오류가 발생하면 많은 경우 이것은 링크 / 컴파일 명령 스레드 라이브러리를 포함하지 않았기 때문입니다.

클라이언트 라이브러리는 연결마다 스레드로부터 안전합니다. 2 개의 스레드에 동일한 연결을 공유 할 수 있지만 다음과 같은 경고를 수반합니다.

  • 여러 스레드가 동일한 연결에서 동시에 MySQL 서버에 쿼리를 보낼 수 없습니다. 특히 하나의 스레드에서 mysql_query() 와 mysql_store_result() 의 호출 사이에 다른 스레드가 동일한 연결을 사용하지 않는 것을 확인해야합니다. mysql_query() 와 mysql_store_result() 호출 쌍을 상호 배타적 잠금으로 묶어야합니다. mysql_store_result() 가 반환되면 잠금을 해제 할 다른 스레드가 동일한 연결을 쿼리 할 수 있습니다.

    POSIX 쓰레드를 사용하는 경우 pthread_mutex_lock() 및 pthread_mutex_unlock() 를 사용하여 상호 배타적 잠금을 설정하고 해제 할 수 있습니다.

  • 많은 스레드는 mysql_store_result() 에 의해 취득되는 다양한 결과 세트에 액세스 할 수 있습니다.

  • mysql_use_result() 를 사용하려면 결과 세트가 닫힐 때까지 동일한 연결을 사용하는 다른 thread가 없는지 확인해야합니다. 그러나 동일한 연결을 공유하는 thread 클라이언트가 mysql_store_result() 를 사용하는 것이 실제로 가장 적합합니다.

MySQL 데이터베이스 연결을 생성하고 있지 않지만, MySQL 함수를 호출하는 thread가있는 경우 다음의 것을 알아야합니다.

mysql_init() 를 호출하면, MySQL은 특히 디버그 라이브러리에서 사용되는 쓰레드의 고유의 변수를 만듭니다. 스레드가 mysql_init() 를 호출하기 전에 MySQL 함수를 호출하면 해당 스레드는 필요한 thread 고유 변수가 설정되어 있지 않기 때문에, 조만간 코어 덤프가 생성 될 수 있습니다. 문제를 해결하려면 다음을 수행해야합니다.

  1. 다른 모든 MySQL 함수 전에 mysql_library_init() 를 호출합니다. 그것은 스레드로부터 안전하지 않으므로 스레드가 생성되기 전에 그것을 호출하거나 상호 배타 락에 전화를 보호합니다.

  2. mysql_thread_init() 이 스레드 핸들러의 MySQL 함수를 호출하기 전에 초기에 호출되도록 조정합니다. mysql_init() 를 호출하면, 자동으로 mysql_thread_init() 를 호출합니다.

  3. 스레드에서 pthread_exit() 를 호출하기 전에 mysql_thread_end() 를 호출합니다. 이렇게하면 MySQL 스레드 고유 변수에 의해 사용 된 메모리를 해제합니다.

mysql_init() 에 앞서주의 사항은 mysql_init() 를 호출 mysql_connect() 에도 적용됩니다.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved