우리는 우리의 예를 컴파일합니다. MySQL 커넥터 DLL에 대한 경로가 제공됩니다. libmysql6.1-cil, mysql-server, mysql-client : 리눅스에서, 우리는이 튜토리얼의 예를 실행하는 여러 패키지를 설치해야합니다. 또한 패키지 또는 소스에서 Mono 프로젝트에서 C# 컴파일러를 설치해야 합니다. 시스템 단어 크기(예: 32비트 시스템의 int 또는 64비트 시스템의 긴)와 같은 항목을 다룰 때 읽기는 일반적으로 원자성이므로 한 번에 필요한 모든 비트를 잡을 수 있습니다. 그러나 시스템 단어 크기보다 큰 것을 다룰 때 (예를 들어 32 비트 시스템에서 길게 읽는 경우) 전체 값을 한 번에 잡을 수 없으므로이 읽기는 원자가 아니기 때문에 몇 가지 문제가 발생할 수 있습니다. 이 프로그램에서는 작성자 테이블의 첫 번째 행에 있는 작성자의 이름을 변경하려고 합니다. 우리는 또한이 저자와 관련된 책을 변경해야합니다. 트랜잭션이 필요한 좋은 예입니다. 저자를 변경하고 저자의 책을 변경하지 않으면 데이터가 손상됩니다. 다음으로 새 데이터베이스 사용자와 새 데이터베이스를 만듭니다. mysql 클라이언트를 사용합니다.

우리는 서버에 연결하는 mysql 모니터 클라이언트 응용 프로그램을 사용합니다. 루트 계정을 사용하여 데이터베이스에 연결합니다. SHOW DATABASES 문을 사용하여 사용 가능한 모든 데이터베이스를 표시합니다. Exchange()를 사용하면 지정된 위치(ref 매개 변수)에 새 값을 저장하고 결과적으로 이전 값을 반환할 수 있습니다. Read()가 원자적으로 읽을 수 있도록 허용하는 것처럼 Exchange()를 사용하는 한 가지 방법은 원자적으로 값을 작성하는 것입니다. 예를 들어 Incrementor에 Reset() 메서드를 추가하려면 다음과 같은 작업을 수행할 수 있습니다. 음, 언제든지 값을 설정하고 이전 값을 기반으로 조치를 취하려고합니다. 예를 들어 여러 작업이 있는 방식이 있을 수 있으며, 자주 각 작업을 지명하여 관리 작업을 수행할 수 있습니다. 어떤 이유로든 이 스레드를 전용으로 만들고 싶지는 않지만 현재 점유되지 않은 스레드가 작업에 대해 자신을 지명할 수 있도록 충분히 견고하기를 원할 수 있습니다.

이 작업을 수행하는 쉽고 가벼운 방법은 누군가가 «선거»를 획득했는지 여부를 오랫동안 나타내는 것입니다. 따라서 0은 아무도 선출되지 않았으며 1은 누군가가 선출되었음을 나타냅니다. 기술적 관점에서, 우리는 DLL이 필요합니다. 우분투 리눅스에서, 그것은 위의 경로 아래에 위치 했다. DLL 라이브러리로 가는 경로를 알아야 합니다. 예제를 컴파일합니다. libmysql6.1-cil은 CLI에 대한 MySQL 데이터베이스 커넥터입니다. C#으로 작성되었으며 C#, Visual Basic, Boo 등 모든 CLI 언어에서 사용할 수 있습니다. 예를 들어, 32비트 시스템에서는 다른 스레드가 값을 증가하기 전에 긴 절반의 절반을 읽을 수 있고 나머지 절반은 증분 후에 읽을 수 있습니다. 이러한 방식으로 잘못된 값을 읽지 못하도록 하기 위해 Read를 원자성으로 강제하기 위해 Interlocked.Read()를 수행할 수 있습니다(물론 쓰기 또는 증분도 원자성인지 확인하려는 경우): SQL Server 2012로 작업하는 경우 마지막 집합 격리 수준이 follo가 됩니다.

w 다른 컨텍스트에 의해 연결 풀에서 다시 검색 된 경우에도 항상 연결을 누릅니다. 예를 들어 커밋되지 않은 트랜잭션 범위를 설정하면 트랜잭션 범위가 다음에 트랜잭션 범위를 변경할 때까지 항상 더러워지는 읽기를 수행하므로 예제를 컴파일하려면 Winforms에 대한 추가 DLL을 포함해야 합니다. , 그리기 및 데이터에 대한 것입니다.