if (lock == 0) {
lock = myPID;
}
class Acccount {
long val = 0; //这里不可在其他方法修改,只能通过add/minus修改
object thisLock = new object();
public void add(const long x) {
lock(thisLock) {
val +=x;
}
}
public void minus(const long x) {
lock(thisLock) {
val -=x;
}
}
}
| 分类方式 | 分类 |
|---|---|
| 按锁的粒度划分 | 表级锁、行级锁、页级锁 |
| 按锁的级别划分 | 共享锁、排他锁 |
| 按加锁方式划分 | 自动锁、显示锁 |
| 按锁的使用方式划分 | 乐观锁、悲观锁 |
| 按操作划分 | DML锁、DDL锁 |
@protocol NSLocking - (void)lock; - (void)unlock; @end
- (void)nslockDemo {
NSLock *myLock = [[NSLock alloc] init];
_testLock = [[TestLock alloc] init];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[myLock lock];
[_testLock method1];
sleep(5);
[myLock unlock];
if ([myLock tryLock]) {
NSLog(@"可以获得锁");
}else {
NSLog(@"不可以获得所");
}
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sleep(1);
if ([myLock tryLock]) {
NSLog(@"---可以获得锁");
}else {
NSLog(@"----不可以获得所");
}
[myLock lock];
[_testLock method2];
[myLock unlock];
});
}
- (void)synchronizeDemo {
_testLock = [[TestLock alloc] init];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
@synchronized (_testLock) {
[_testLock method1];
sleep(5);
}
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sleep(1);
@synchronized (_testLock) {
[_testLock method2];
}
});
}
- (void)gcdDemo {
_testLock = [[TestLock alloc] init];
dispatch_semaphore_t semaphore = dispatch_semaphore_create(1);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[_testLock method1];
sleep(5);
dispatch_semaphore_signal(semaphore);
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sleep(1);
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[_testLock method2];
dispatch_semaphore_signal(semaphore);
});
}
- (void)pthreadDemo {
_testLock = [[TestLock alloc] init];
__block pthread_mutex_t mutex;
pthread_mutex_init(&mutex, NULL);
//线程1
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
pthread_mutex_lock(&mutex);
[_testLock method1];
sleep(5);
pthread_mutex_unlock(&mutex);
});
//线程2
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sleep(1);
pthread_mutex_lock(&mutex);
[_testLock method2];
pthread_mutex_unlock(&mutex);
});
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有