| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [View Raw Code] [Original HTTPS Page] |
Question list
我们在使用多线程的时候多个线程可能会访问同一块资源,这样就很容易引发数据错乱和数据安全等问题,这时候就需要我们保证每次只有一个线程访问这一块资源,锁 应运而生
OSSpinLock 自旋锁 ,存在的问题是, 优先级反转问题,破坏了spinlock
@synchronized 性能最差,但是SD和AFN等其他框架很多使用这个.
dispatch_semaphore_t signal = dispatch_semaphore_create(1);
dispatch_time_t overTime = dispatch_time(DISPATCH_TIME_NOW, 1.0f * NSEC_PER_SEC);
//Thread1
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"Thread1 waiting");
dispatch_semaphore_wait(signal, overTime); //signal 值 -1
NSLog(@"Thread1");
dispatch_semaphore_signal(signal); //signal 值 +1
NSLog(@"Thread1 send signal");
});
//Thread2
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"Thread2 waiting");
dispatch_semaphore_wait(signal, overTime);
NSLog(@"Thread2");
dispatch_semaphore_signal(signal);
NSLog(@"Thread2 send signal");
});
dispatch_semaphore_create(1): 若传入为0(over time 失效) 则阻塞线程并等待timeout,时间到后会执行其后的语句,
dispatch_semaphore_wait(signal, overTime):可以理解为 lock,会使得 signal 值 -1
dispatch_semaphore_signal(signal):可以理解为 unlock,会使得 signal 值 +1
循环通过pthread_create创建线程,创建s_tfthread对象做为线程句,加入线程数组,s_tftask_content->methord初始化为空函数
创建任务执行函数,执行完通过task初始化函数后,在执行函数中通过pthread_cond_wait信号将当前创建的线程挂起
创建完之后,程序中将会有n个挂起状态的线程,当需要执行新的task的时候查找,我们就可以根据不同的task标志在k_threads中查询出空闲线程,并创建新的s_tftask_content加入s_tfthread的任务列表,通过pthread_cond_signal重新唤醒该线程继续执行任务
无非post带参数,某种层面比get不受限制
从语义角度分析
[self.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"content-type"];
沙盒
plist文件(属性列表)
preference(偏好设置)
NSKeyedArchiver(归档)
SQLite 3
CoreData
Realm (Swift OC 不可以互操作)
| Back | FazBrowse Home | New Git URL |