Algorithm
lc393_UTF-8编码验证
思路: 直接模拟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| class Solution { public: int how_many_bytes(int code) { if ((code & (1 << 7)) == 0) { return 1; } if ((code & (1 << 6)) == 0) { return -1; } if ((code & (1 << 5)) == 0) { return 2; } if ((code & (1 << 4)) == 0) { return 3; } if ((code & (1 << 3)) == 0) { return 4; } return -1; }
bool is_remain_code(int code) { if ((code & (1 << 7)) == 0) { return 0; } if ((code & (1 << 6)) == 0) { return 1; } return 0; }
bool validUtf8(vector<int>& data) { int sz = data.size(); assert(sz);
int tmp_code_cnt = -1; for (int i = 0; i < sz; i++) { assert(data[i] >= 0 && data[i] <= 255); tmp_code_cnt = how_many_bytes(data[i]); if (tmp_code_cnt == -1) { return false; }
tmp_code_cnt--; while (tmp_code_cnt--) { i++; if (i == sz || !is_remain_code(data[i])) { return false; } } }
return true; } };
|
Review
【TED演讲】区块链将如何从根本上改变经济
演讲主要是讲了区块链通过分布式记录方式,保证过程可信,从而使得区块链代替可信交易,然后成为经济去中心化的一部分。但是演讲中举例购买物品,就让我想到闲鱼,交易如果发生了不达预期的情况,买家不满意的话,在目前我的了解来看,这是必然需要一个第三方介入的,否则真的没法区分是店家作弊还是买家作弊,除非发货和收货都需要做一遍极其严格的测试…但是这应该不太可能…
Tips
自旋锁和读写锁
https://www.cs.utexas.edu/~pingali/CS378/2015sp/lectures/Spinlocks%20and%20Read-Write%20Locks.htm
这篇文章介绍了一些普通锁的多种实现方式及性能对比 和 读写锁的多种实现方式及性能对比
Share-读写锁的读锁是否会超过最大数量
当我的程序出错在读锁的时候,我怀疑获取读锁的线程数超过了读锁的最大数量了,嗯嗯,因为以前可以跑,加大线程数就跑不动了,所以应该就是超过数量了,可以测试读线程验证一下
网上找了一下,发现并不是如此,因为最大数量很大…
所以还是仔细看日志,发现是先获取了写锁,然后再获取读锁,导致了死锁,所以报错在读锁上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include <pthread.h> #include <stdio.h> #include <limits.h>
int main(int argc, char **argv) { unsigned long long i; pthread_rwlock_t rw; int r;
pthread_rwlock_init(&rw, NULL);
for (i = 0; i < INT_MAX; i++) { if ((r = pthread_rwlock_rdlock(&rw)) != 0) break; if (i % 10000000 == 0) printf("%llu\n", i); }
printf("%d %llu\n", r, i);
return 0; }
|