다음을 통해 공유


lock 클래스

이 클래스는 여러 스레드에서 개체에 대한 액세스를 동기화하기 위한 잠금을 자동으로 수행합니다. 생성되면 잠금을 획득하고 소멸되면 잠금이 해제됩니다.

구문

ref class lock;

설명

lock 는 CLR 개체에만 사용할 수 있으며 CLR 코드에서만 사용할 수 있습니다.

내부적으로 잠금 클래스는 액세스를 동기화하는 데 사용합니다 Monitor . 자세한 내용은 참조된 문서를 참조하세요.

멤버

Public 생성자

속성 설명
lock::lock lock 필요에 따라 지정된 시간 동안 또는 전혀 잠금을 획득하지 않기 위해 대기하는 개체를 생성합니다.
lock::~lock 개체를 소멸합니다 lock .

공용 메서드

이름 설명
lock::acquire 개체에 대한 잠금을 획득하고, 필요에 따라 지정된 시간 동안 또는 전혀 잠금을 획득하지 않을 때까지 기다립니다.
lock::is_locked 잠금이 유지되고 있는지 여부를 나타냅니다.
lock::release 잠금을 해제합니다.
lock::try_acquire 개체에 대한 잠금을 획득하여 지정된 시간 동안 대기하고 예외를 throw하는 bool 대신 획득 성공을 보고하도록 반환합니다.

Public 연산자

속성 설명
lock::operator bool 조건식에서 사용하기 lock 위한 연산자입니다.
lock::operator== 같음 연산자입니다.
lock::operator!= 같지 않음 연산자입니다.

요구 사항

헤더 파일<msclr\lock.h>

네임스페이스 msclr

lock::lock

lock 필요에 따라 지정된 시간 동안 또는 전혀 잠금을 획득하지 않기 위해 대기하는 개체를 생성합니다.

template<class T> lock(
   T ^ _object
);
template<class T> lock(
   T ^ _object,
   int _timeout
);
template<class T> lock(
   T ^ _object,
   System::TimeSpan _timeout
);
template<class T> lock(
   T ^ _object,
   lock_later
);

매개 변수

_객체
잠글 개체입니다.

_타임 아웃
시간 제한 값(밀리초 또는 .)입니다 TimeSpan.

예외

ApplicationException 시간 제한 전에 잠금 획득이 발생하지 않으면 throw됩니다.

설명

생성자의 처음 세 가지 형식은 지정된 제한 시간 내에 잠금 _object 을 획득하려고 시도합니다(또는 Infinite 지정되지 않은 경우).

생성자의 네 번째 형식은 잠금 _object을 획득하지 않습니다. lock_later 는 lock_when 열거형의 멤버입니다. lock::acquire 또는 lock::try_acquire 사용하여 이 경우 잠금을 획득합니다.

소멸자가 호출되면 잠금이 자동으로 해제됩니다.

_object 가 될 ReaderWriterLock수 없습니다. 이 경우 컴파일러 오류가 발생합니다.

예시

이 예제에서는 여러 스레드에서 클래스의 단일 인스턴스를 사용합니다. 클래스는 자체 잠금을 사용하여 내부 데이터에 대한 액세스가 각 스레드에 대해 일관되도록 합니다. 주 애플리케이션 스레드는 클래스의 동일한 인스턴스에 대한 잠금을 사용하여 작업자 스레드가 여전히 존재하는지 주기적으로 확인합니다. 그런 다음 주 애플리케이션은 모든 작업자 스레드가 작업을 완료할 때까지 종료될 때까지 기다립니다.

// msl_lock_lock.cpp
// compile with: /clr
#include <msclr/lock.h>

using namespace System;
using namespace System::Threading;
using namespace msclr;

ref class CounterClass {
private:
   int Counter;

public:
   property int ThreadCount;

   // function called by multiple threads, use lock to keep Counter consistent
   // for each thread
   void UseCounter() {
      try {
         lock l(this); // wait infinitely

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         for (int i = 0; i < 10; i++) {
            Counter++;
            Thread::Sleep(10);
         }

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         Counter = 0;
         // lock is automatically released when it goes out of scope and its destructor is called
      }
      catch (...) {
         Console::WriteLine("Couldn't acquire lock!");
      }

      ThreadCount--;
   }
};

int main() {
   // create a few threads to contend for access to the shared data
   CounterClass^ cc = gcnew CounterClass;
   array<Thread^>^ tarr = gcnew array<Thread^>(5);
   ThreadStart^ startDelegate = gcnew ThreadStart(cc, &CounterClass::UseCounter);
   for (int i = 0; i < tarr->Length; i++) {
      tarr[i] = gcnew Thread(startDelegate);
      cc->ThreadCount++;
      tarr[i]->Start();
   }

   // keep our main thread alive until all worker threads have completed
   lock l(cc, lock_later); // don't lock now, just create the object
   while (true) {
      if (l.try_acquire(50)) { // try to acquire lock, don't throw an exception if can't
         if (0 == cc->ThreadCount) {
            Console::WriteLine("All threads completed.");
            break; // all threads are gone, exit while
         }
         else {
            Console::WriteLine("{0} threads exist, continue waiting...", cc->ThreadCount);
            l.release(); // some threads exist, let them do their work
         }
      }
   }
}
In thread 3, Counter = 0
In thread 3, Counter = 10
In thread 5, Counter = 0
In thread 5, Counter = 10
In thread 7, Counter = 0
In thread 7, Counter = 10
In thread 4, Counter = 0
In thread 4, Counter = 10
In thread 6, Counter = 0
In thread 6, Counter = 10
All threads completed.

lock::~lock

개체를 소멸합니다 lock .

~lock();

설명

소멸자가 lock::release를 호출합니다.

예시

이 예제에서는 여러 스레드에서 클래스의 단일 인스턴스를 사용합니다. 클래스는 자체 잠금을 사용하여 내부 데이터에 대한 액세스가 각 스레드에 대해 일관되도록 합니다. 주 애플리케이션 스레드는 클래스의 동일한 인스턴스에 대한 잠금을 사용하여 작업자 스레드가 여전히 존재하는지 주기적으로 확인합니다. 그런 다음 주 애플리케이션은 모든 작업자 스레드가 작업을 완료할 때까지 종료될 때까지 기다립니다.

// msl_lock_dtor.cpp
// compile with: /clr
#include <msclr/lock.h>

using namespace System;
using namespace System::Threading;
using namespace msclr;

ref class CounterClass {
private:
   int Counter;

public:
   property int ThreadCount;

   // function called by multiple threads, use lock to keep Counter consistent
   // for each thread
   void UseCounter() {
      try {
         lock l(this); // wait infinitely

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         for (int i = 0; i < 10; i++) {
            Counter++;
            Thread::Sleep(10);
         }

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         Counter = 0;
         // lock is automatically released when it goes out of scope and its destructor is called
      }
      catch (...) {
         Console::WriteLine("Couldn't acquire lock!");
      }

      ThreadCount--;
   }
};

int main() {
   // create a few threads to contend for access to the shared data
   CounterClass^ cc = gcnew CounterClass;
   array<Thread^>^ tarr = gcnew array<Thread^>(5);
   ThreadStart^ startDelegate = gcnew ThreadStart(cc, &CounterClass::UseCounter);
   for (int i = 0; i < tarr->Length; i++) {
      tarr[i] = gcnew Thread(startDelegate);
      cc->ThreadCount++;
      tarr[i]->Start();
   }

   // keep our main thread alive until all worker threads have completed
   lock l(cc, lock_later); // don't lock now, just create the object
   while (true) {
      if (l.try_acquire(50)) { // try to acquire lock, don't throw an exception if can't
         if (0 == cc->ThreadCount) {
            Console::WriteLine("All threads completed.");
            break; // all threads are gone, exit while
         }
         else {
            Console::WriteLine("{0} threads exist, continue waiting...", cc->ThreadCount);
            l.release(); // some threads exist, let them do their work
         }
      }
   }
}
In thread 3, Counter = 0
In thread 3, Counter = 10
In thread 5, Counter = 0
In thread 5, Counter = 10
In thread 7, Counter = 0
In thread 7, Counter = 10
In thread 4, Counter = 0
In thread 4, Counter = 10
In thread 6, Counter = 0
In thread 6, Counter = 10
All threads completed.

lock::acquire

개체에 대한 잠금을 획득하고, 필요에 따라 지정된 시간 동안 또는 전혀 잠금을 획득하지 않을 때까지 기다립니다.

void acquire();
void acquire(
   int _timeout
);
void acquire(
   System::TimeSpan _timeout
);

매개 변수

_타임 아웃
시간 제한 값(밀리초 또는 .)입니다 TimeSpan.

예외

ApplicationException 시간 제한 전에 잠금 획득이 발생하지 않으면 throw됩니다.

설명

시간 제한 값이 제공되지 않으면 기본 시간 제한은 .입니다 Infinite.

잠금이 이미 획득된 경우 이 함수는 아무 작업도 수행하지 않습니다.

예시

이 예제에서는 여러 스레드에서 클래스의 단일 인스턴스를 사용합니다. 클래스는 자체 잠금을 사용하여 내부 데이터에 대한 액세스가 각 스레드에 대해 일관되도록 합니다. 주 애플리케이션 스레드는 클래스의 동일한 인스턴스에 대한 잠금을 사용하여 작업자 스레드가 여전히 존재하는지 주기적으로 확인합니다. 그런 다음 주 애플리케이션은 모든 작업자 스레드가 작업을 완료할 때까지 종료될 때까지 기다립니다.

// msl_lock_acquire.cpp
// compile with: /clr
#include <msclr/lock.h>

using namespace System;
using namespace System::Threading;
using namespace msclr;

ref class CounterClass {
private:
   int Counter;

public:
   property int ThreadCount;

   // function called by multiple threads, use lock to keep Counter consistent
   // for each thread
   void UseCounter() {
      try {
         lock l(this); // wait infinitely

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         for (int i = 0; i < 10; i++) {
            Counter++;
            Thread::Sleep(10);
         }

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         Counter = 0;
         // lock is automatically released when it goes out of scope and its destructor is called
      }
      catch (...) {
         Console::WriteLine("Couldn't acquire lock!");
      }

      ThreadCount--;
   }
};

int main() {
   // create a few threads to contend for access to the shared data
   CounterClass^ cc = gcnew CounterClass;
   array<Thread^>^ tarr = gcnew array<Thread^>(5);
   ThreadStart^ startDelegate = gcnew ThreadStart(cc, &CounterClass::UseCounter);
   for (int i = 0; i < tarr->Length; i++) {
      tarr[i] = gcnew Thread(startDelegate);
      cc->ThreadCount++;
      tarr[i]->Start();
   }

   // keep our main thread alive until all worker threads have completed
   lock l(cc, lock_later); // don't lock now, just create the object
   while (true) {
      if (l.try_acquire(50)) { // try to acquire lock, don't throw an exception if can't
         if (0 == cc->ThreadCount) {
            Console::WriteLine("All threads completed.");
            break; // all threads are gone, exit while
         }
         else {
            Console::WriteLine("{0} threads exist, continue waiting...", cc->ThreadCount);
            l.release(); // some threads exist, let them do their work
         }
      }
   }
}
In thread 3, Counter = 0
In thread 3, Counter = 10
In thread 5, Counter = 0
In thread 5, Counter = 10
In thread 7, Counter = 0
In thread 7, Counter = 10
In thread 4, Counter = 0
In thread 4, Counter = 10
In thread 6, Counter = 0
In thread 6, Counter = 10
All threads completed.

lock::is_locked

잠금이 유지되고 있는지 여부를 나타냅니다.

bool is_locked();

반환 값

true 잠금이 유지 false 되면 그렇지 않습니다.

예시

이 예제에서는 여러 스레드에서 클래스의 단일 인스턴스를 사용합니다. 클래스는 자체 잠금을 사용하여 내부 데이터에 대한 액세스가 각 스레드에 대해 일관되도록 합니다. 주 애플리케이션 스레드는 클래스의 동일한 인스턴스에 대한 잠금을 사용하여 작업자 스레드가 여전히 존재하는지 주기적으로 확인하고 모든 작업자 스레드가 작업을 완료할 때까지 대기합니다.

// msl_lock_is_locked.cpp
// compile with: /clr
#include <msclr/lock.h>

using namespace System;
using namespace System::Threading;
using namespace msclr;

ref class CounterClass {
private:
   int Counter;

public:
   property int ThreadCount;

   // function called by multiple threads, use lock to keep Counter consistent
   // for each thread
   void UseCounter() {
      try {
         lock l(this); // wait infinitely

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         for (int i = 0; i < 10; i++) {
            Counter++;
            Thread::Sleep(10);
         }

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         Counter = 0;
         // lock is automatically released when it goes out of scope and its destructor is called
      }
      catch (...) {
         Console::WriteLine("Couldn't acquire lock!");
      }

      ThreadCount--;
   }
};

int main() {
   // create a few threads to contend for access to the shared data
   CounterClass^ cc = gcnew CounterClass;
   array<Thread^>^ tarr = gcnew array<Thread^>(5);
   ThreadStart^ startDelegate = gcnew ThreadStart(cc, &CounterClass::UseCounter);
   for (int i = 0; i < tarr->Length; i++) {
      tarr[i] = gcnew Thread(startDelegate);
      cc->ThreadCount++;
      tarr[i]->Start();
   }

   // keep our main thread alive until all worker threads have completed
   lock l(cc, lock_later); // don't lock now, just create the object
   while (true) {
      l.try_acquire(50); // try to acquire lock, don't throw an exception if can't
      if (l.is_locked()) { // check if we got the lock
         if (0 == cc->ThreadCount) {
            Console::WriteLine("All threads completed.");
            break; // all threads are gone, exit while
         }
         else {
            Console::WriteLine("{0} threads exist, continue waiting...", cc->ThreadCount);
            l.release(); // some threads exist, let them do their work
         }
      }
   }
}
In thread 3, Counter = 0
In thread 3, Counter = 10
In thread 5, Counter = 0
In thread 5, Counter = 10
In thread 4, Counter = 0
In thread 4, Counter = 10
In thread 7, Counter = 0
In thread 7, Counter = 10
In thread 6, Counter = 0
In thread 6, Counter = 10
All threads completed.

lock::operator bool

조건식에서 사용하기 lock 위한 연산자입니다.

operator bool();

반환 값

true 잠금이 유지 false 되면 그렇지 않습니다.

설명

이 연산자는 실제로 정수 형식으로 _detail_class::_safe_bool 변환할 수 없기 때문에 보다 bool 안전한 값으로 변환됩니다.

예시

이 예제에서는 여러 스레드에서 클래스의 단일 인스턴스를 사용합니다. 클래스는 자체 잠금을 사용하여 내부 데이터에 대한 액세스가 각 스레드에 대해 일관되도록 합니다. 주 애플리케이션 스레드는 클래스의 동일한 인스턴스에 대한 잠금을 사용하여 작업자 스레드가 여전히 존재하는지 주기적으로 확인합니다. 주 애플리케이션은 모든 작업자 스레드가 작업을 완료할 때까지 종료되기를 기다립니다.

// msl_lock_op_bool.cpp
// compile with: /clr
#include <msclr/lock.h>

using namespace System;
using namespace System::Threading;
using namespace msclr;

ref class CounterClass {
private:
   int Counter;

public:
   property int ThreadCount;

   // function called by multiple threads, use lock to keep Counter consistent
   // for each thread
   void UseCounter() {
      try {
         lock l(this); // wait infinitely

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         for (int i = 0; i < 10; i++) {
            Counter++;
            Thread::Sleep(10);
         }

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         Counter = 0;
         // lock is automatically released when it goes out of scope and its destructor is called
      }
      catch (...) {
         Console::WriteLine("Couldn't acquire lock!");
      }

      ThreadCount--;
   }
};

int main() {
   // create a few threads to contend for access to the shared data
   CounterClass^ cc = gcnew CounterClass;
   array<Thread^>^ tarr = gcnew array<Thread^>(5);
   ThreadStart^ startDelegate = gcnew ThreadStart(cc, &CounterClass::UseCounter);
   for (int i = 0; i < tarr->Length; i++) {
      tarr[i] = gcnew Thread(startDelegate);
      cc->ThreadCount++;
      tarr[i]->Start();
   }

   // keep our main thread alive until all worker threads have completed
   lock l(cc, lock_later); // don't lock now, just create the object
   while (true) {
      l.try_acquire(50); // try to acquire lock, don't throw an exception if can't
      if (l) { // use bool operator to check for lock
         if (0 == cc->ThreadCount) {
            Console::WriteLine("All threads completed.");
            break; // all threads are gone, exit while
         }
         else {
            Console::WriteLine("{0} threads exist, continue waiting...", cc->ThreadCount);
            l.release(); // some threads exist, let them do their work
         }
      }
   }
}
In thread 3, Counter = 0
In thread 3, Counter = 10
In thread 5, Counter = 0
In thread 5, Counter = 10
In thread 7, Counter = 0
In thread 7, Counter = 10
In thread 4, Counter = 0
In thread 4, Counter = 10
In thread 6, Counter = 0
In thread 6, Counter = 10
All threads completed.

lock::release

잠금을 해제합니다.

void release();

설명

잠금이 유지 release 되지 않는 경우 아무 것도 수행하지 않습니다.

이 함수를 명시적으로 호출할 필요는 없습니다. 개체가 lock 범위를 벗어나면 소멸자가 호출됩니다 release.

예시

이 예제에서는 여러 스레드에서 클래스의 단일 인스턴스를 사용합니다. 클래스는 자체 잠금을 사용하여 내부 데이터에 대한 액세스가 각 스레드에 대해 일관되도록 합니다. 주 애플리케이션 스레드는 클래스의 동일한 인스턴스에 대한 잠금을 사용하여 작업자 스레드가 여전히 존재하는지 주기적으로 확인합니다. 그런 다음 주 애플리케이션은 모든 작업자 스레드가 작업을 완료할 때까지 종료될 때까지 기다립니다.

// msl_lock_release.cpp
// compile with: /clr
#include <msclr/lock.h>

using namespace System;
using namespace System::Threading;
using namespace msclr;

ref class CounterClass {
private:
   int Counter;

public:
   property int ThreadCount;

   // function called by multiple threads, use lock to keep Counter consistent
   // for each thread
   void UseCounter() {
      try {
         lock l(this); // wait infinitely

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         for (int i = 0; i < 10; i++) {
            Counter++;
            Thread::Sleep(10);
         }

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         Counter = 0;
         // lock is automatically released when it goes out of scope and its destructor is called
      }
      catch (...) {
         Console::WriteLine("Couldn't acquire lock!");
      }

      ThreadCount--;
   }
};

int main() {
   // create a few threads to contend for access to the shared data
   CounterClass^ cc = gcnew CounterClass;
   array<Thread^>^ tarr = gcnew array<Thread^>(5);
   ThreadStart^ startDelegate = gcnew ThreadStart(cc, &CounterClass::UseCounter);
   for (int i = 0; i < tarr->Length; i++) {
      tarr[i] = gcnew Thread(startDelegate);
      cc->ThreadCount++;
      tarr[i]->Start();
   }

   // keep our main thread alive until all worker threads have completed
   lock l(cc, lock_later); // don't lock now, just create the object
   while (true) {
      if (l.try_acquire(50)) { // try to acquire lock, don't throw an exception if can't
         if (0 == cc->ThreadCount) {
            Console::WriteLine("All threads completed.");
            break; // all threads are gone, exit while
         }
         else {
            Console::WriteLine("{0} threads exist, continue waiting...", cc->ThreadCount);
            l.release(); // some threads exist, let them do their work
         }
      }
   }
}
In thread 3, Counter = 0
In thread 3, Counter = 10
In thread 5, Counter = 0
In thread 5, Counter = 10
In thread 7, Counter = 0
In thread 7, Counter = 10
In thread 4, Counter = 0
In thread 4, Counter = 10
In thread 6, Counter = 0
In thread 6, Counter = 10
All threads completed.

lock::try_acquire

개체에 대한 잠금을 획득하여 지정된 시간 동안 대기하고 예외를 throw하는 bool 대신 획득 성공을 보고하도록 반환합니다.

bool try_acquire(
   int _timeout_ms
);
bool try_acquire(
   System::TimeSpan _timeout
);

매개 변수

_타임 아웃
시간 제한 값(밀리초 또는 .)입니다 TimeSpan.

반환 값

true 잠금이 획득되었 false 으면 그렇지 않습니다.

설명

잠금이 이미 획득된 경우 이 함수는 아무 작업도 수행하지 않습니다.

예시

이 예제에서는 여러 스레드에서 클래스의 단일 인스턴스를 사용합니다. 클래스는 자체 잠금을 사용하여 내부 데이터에 대한 액세스가 각 스레드에 대해 일관되도록 합니다. 주 애플리케이션 스레드는 클래스의 동일한 인스턴스에 대한 잠금을 사용하여 작업자 스레드가 여전히 존재하는지 주기적으로 확인합니다. 그런 다음 주 애플리케이션은 모든 작업자 스레드가 작업을 완료할 때까지 종료될 때까지 기다립니다.

// msl_lock_try_acquire.cpp
// compile with: /clr
#include <msclr/lock.h>

using namespace System;
using namespace System::Threading;
using namespace msclr;

ref class CounterClass {
private:
   int Counter;

public:
   property int ThreadCount;

   // function called by multiple threads, use lock to keep Counter consistent
   // for each thread
   void UseCounter() {
      try {
         lock l(this); // wait infinitely

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         for (int i = 0; i < 10; i++) {
            Counter++;
            Thread::Sleep(10);
         }

         Console::WriteLine("In thread {0}, Counter = {1}", Thread::CurrentThread->ManagedThreadId,
            Counter);

         Counter = 0;
         // lock is automatically released when it goes out of scope and its destructor is called
      }
      catch (...) {
         Console::WriteLine("Couldn't acquire lock!");
      }

      ThreadCount--;
   }
};

int main() {
   // create a few threads to contend for access to the shared data
   CounterClass^ cc = gcnew CounterClass;
   array<Thread^>^ tarr = gcnew array<Thread^>(5);
   ThreadStart^ startDelegate = gcnew ThreadStart(cc, &CounterClass::UseCounter);
   for (int i = 0; i < tarr->Length; i++) {
      tarr[i] = gcnew Thread(startDelegate);
      cc->ThreadCount++;
      tarr[i]->Start();
   }

   // keep our main thread alive until all worker threads have completed
   lock l(cc, lock_later); // don't lock now, just create the object
   while (true) {
      if (l.try_acquire(50)) { // try to acquire lock, don't throw an exception if can't
         if (0 == cc->ThreadCount) {
            Console::WriteLine("All threads completed.");
            break; // all threads are gone, exit while
         }
         else {
            Console::WriteLine("{0} threads exist, continue waiting...", cc->ThreadCount);
            l.release(); // some threads exist, let them do their work
         }
      }
   }
}
In thread 3, Counter = 0
In thread 3, Counter = 10
In thread 5, Counter = 0
In thread 5, Counter = 10
In thread 7, Counter = 0
In thread 7, Counter = 10
In thread 4, Counter = 0
In thread 4, Counter = 10
In thread 6, Counter = 0
In thread 6, Counter = 10
All threads completed.

lock::operator==

같음 연산자입니다.

template<class T> bool operator==(
   T t
);

매개 변수

t
같음을 비교할 개체입니다.

반환 값

잠금 개체와 같은 경우 t 를 반환하고, false 그렇지 않으면 반환 true 합니다.

예시

// msl_lock_op_eq.cpp
// compile with: /clr
#include <msclr/lock.h>

using namespace System;
using namespace System::Threading;
using namespace msclr;

int main () {
   Object^ o1 = gcnew Object;
   lock l1(o1);
   if (l1 == o1) {
      Console::WriteLine("Equal!");
   }
}
Equal!

lock::operator!=

같지 않음 연산자입니다.

template<class T> bool operator!=(
   T t
);

매개 변수

t
같지 않음을 비교할 개체입니다.

반환 값

잠금의 개체와 다른 경우 t 반환하고, false 그렇지 않으면 반환 true 합니다.

예제

// msl_lock_op_ineq.cpp
// compile with: /clr
#include <msclr/lock.h>

using namespace System;
using namespace System::Threading;
using namespace msclr;

int main () {
   Object^ o1 = gcnew Object;
   Object^ o2 = gcnew Object;
   lock l1(o1);
   if (l1 != o2) {
      Console::WriteLine("Inequal!");
   }
}
Inequal!