在自定义并发dispatch_queue上使用dispatch_sync时,我在应用程序中看到间歇性死锁.我正在使用类似于Mike Ash博客中描述的方法来支持并发读访问,但NSMutableDictionary上的线程安全突变充当当前活动网络RPC请求的缓存.我的项目使用ARC.
我创建队列:
dispatch_queue_t activeRequestsQueue = dispatch_queue_create("my.queue.name",
DISPATCH_QUEUE_CONCURRENT);
Run Code Online (Sandbox Code Playgroud)
和可变字典
NSMutableDictionary *activeRequests = [[NSMutable dictionary alloc] init];
Run Code Online (Sandbox Code Playgroud)
我从队列中读取元素,如下所示:
- (id)activeRequestForRpc: (RpcRequest *)rpc
{
assert(![NSThread isMainThread]);
NSString * key = [rpc getKey];
__block id obj = nil;
dispatch_sync(activeRequestsQueue, ^{
obj = [activeRequests objectForKey: key];
});
return obj;
}
Run Code Online (Sandbox Code Playgroud)
我在缓存中添加和删除rpcs
- (void)addActiveRequest: (RpcRequest *)rpc
{
NSString * key = [rpc getKey];
dispatch_barrier_async(activeRequestsQueue, ^{
[activeRequests setObject: rpc forKey: key];
});
}
- (void)removeActiveRequest: (RpcRequest *)rpc
{
NSString * key = [rpc getKey]; …Run Code Online (Sandbox Code Playgroud) 我是postgresql的新手,我似乎无法让它丢掉一张桌子.
db_dev=# \dt
List of relations
Schema | Name | Type | Owner
--------+-------------+-------+-------
public | DataSources | table | ted
public | Emails | table | ted
public | Users | table | ted
(3 rows)
Run Code Online (Sandbox Code Playgroud)
当我尝试删除users表时,它会出错:
db_dev=# drop table Users;
ERROR: table "users" does not exist
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我正在处理一个问题,即由于openssl无法完成握手,python无法通过ssl连接到特定服务器.卷曲和我的浏览器工作.我尝试了几个不同的openssl版本和解决方案,但似乎无法连接.
以下是我在以下两个平台上尝试过的内容.OpenSSL 1.0.1e上的输出打印略有不同,但仍然是相同的错误.
Mac OSX Yosemite - OpenSSL 0.9.8zg 14 July 2015
Debian GNU/Linux 7 (wheezy) - OpenSSL 1.0.1e 11 Feb 2013
Run Code Online (Sandbox Code Playgroud)
没有指定哪个版本
openssl s_client -connect www.uk-recruitment.net:443
openssl s_client -connect www.uk-recruitment.net:443 -cipher 'DEFAULT:!ECDH'
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem -cipher 'DEFAULT:!ECDH'
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem -cipher 'DEFAULT:!ECDH' -servername uk-recruitment.net
Run Code Online (Sandbox Code Playgroud)
但我总能得到相同的结果
CONNECTED(00000003)
66716:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s23_clnt.c:593:
Run Code Online (Sandbox Code Playgroud)
如果我添加-tls1,-tls1_1或-tls1_2与所有相同的选项,我得到一个稍微不同的错误:
openssl s_client -connect www.uk-recruitment.net:443 -tls1
CONNECTED(00000003)
66750:error:14094438:SSL …Run Code Online (Sandbox Code Playgroud)