놓습니다 lock
statement 내부의 ItemAdding
코드를 만들려면 한 번에 하나의 스레드가 코드의 임계 영역에 입력 할 수 있는지 확인하십시오
private Object _lock = new Object();
public override void ItemAdding(SPItemEventProperties properties)
{
lock(_lock)
{
// check number of the list items and cancel the event if necessary
}
}
내가 온을 여러 WFE가있는 팜에 대한이 아이디어와 함께 - 항목이 목록에 추가되는 동안 공유 리소스 (위의 의사 코드의 한 테이블 행)가 잠긴다 :
나도 같은 프런트 엔드 서버를 추가하려고하면 무슨 일이 일어날 지 모르겠어요 때문에
private Object _lock = new Object();
public override void ItemAdding(SPItemEventProperties properties)
{
try
{
// 1. begin a SQL Server transaction
// 2. UPDATE dbo.SEMAPHORE
// SET STATUS = 'Busy'
// WHERE PROCESS = 'EventSignup'
lock(_lock)
{
// 3. check number of the list items and cancel the event if necessary
}
}
finally
{
// 4. UPDATE dbo.SEMAPHORE
// SET STATUS = ''
// WHERE PROCESS = 'EventSignup'
// 5. commit a SQL Server transaction
}
}
은 내가 lock
문을 왼쪽 항목 # 100, # 101 - 트랜잭션이 행을 잠 그거나 것이다 것 그것을하지 때문에 SQL Server와 동일한 연결이 사용됩니까?
* 100 번째 사람이 아직 목록에 없기 때문에 * 항목 *을 추가하는 동시성이 *로 무엇을 의미합니까? 사람 100은 11:54:00에 프로세스를 시작하고 11:54:49에 양식을 제출합니다. 사람 101을 11시 54 분 30 초에 보내고 11시 54 분 48 초에 양식을 제출하십시오. 누가 가입해야합니까? –
사람 (101)이 가입 할 수 있어야합니다. 사람 100이 알림을 받아야합니다. – TanyaB
실제로이 문제가 발생합니까? 존재하지 않는 문제를 조기에 해결하려고하지 않습니까? 동시에 이벤트에 등록하려고 시도하는 최대 사용자 수는 얼마입니까? –