随笔分类 -  算法

myhandle
摘要:#ifndef my_handle_h #define my_handle_h #include #include "mydef.h" #include "mem.h" typedef struct tag_my_handle { int ref; int stack; intptr_t detached; void* ptr; free_t fre... 阅读全文
posted @ 2016-10-19 00:35 zylthinking 阅读(233) 评论(0) 推荐(0)
无锁链表
摘要:#ifndef lkf_h #define lkf_h struct lkf_node { struct lkf_node* next; }; struct lkf_list { struct lkf_node root; struct lkf_node** tail; }; #define LKF_INIT(name) {.root = {NULL}, .tai... 阅读全文
posted @ 2016-10-19 00:30 zylthinking 阅读(1554) 评论(0) 推荐(0)
heap sort
摘要:#include <stdio.h>void heapify(int* intp, unsigned idx, unsigned nr){ unsigned j = idx; while (1) { unsigned i = idx * 2 + 1; if (nr > i && intp[i] > intp[j]) { j = i; } ++i; if (nr > i && intp[i] > intp[j]) { j = i; } ... 阅读全文
posted @ 2013-02-22 15:43 zylthinking 阅读(199) 评论(0) 推荐(0)
逆序对
摘要:算法导论题目: 设 A[0...N] 数组, 若 i < j 且 A[i] > A[j] 则称 (i, j) 为一个逆序对, 给出一个算法, 在最坏 O(nlgn) 的运行时间, 得到任意数组的逆序对个数。#include <stdio.h>#include <stdlib.h>#include <string.h>int merge(int* intp, int a, int b, int c){ int n = c - a; int* p = (int *) malloc(sizeof(int) * n); if (p == NULL) { 阅读全文
posted @ 2013-02-18 16:25 zylthinking 阅读(206) 评论(0) 推荐(0)
用户空间 rcu 的实现
摘要:上一次分析了 classic rcu 在 2.6.28.3 中的实现, 根据它的原理, 在用户空间实现了一份, 性能应该不如内核 rcu, 但整体来讲, 应该比基于锁总线而实现的读写锁要效率高一些。#ifndef rcu_h#define rcu_h#include "list_head.h"struct rcu { int lck; int zombie; struct list_head sync, async, nxtlist, entry; unsigned int nr; int* tlsp; int* intp; int* refp; ... 阅读全文
posted @ 2013-02-06 13:09 zylthinking 阅读(703) 评论(0) 推荐(0)
classic RCU 逻辑分析
摘要:看的是 2.6.18.3 版本的 rcu 代码, 这个版本其实还没有区分什么 tiny rcu, preempt rcu, 这些都出现在以后的版本, 之所以选择这个, 完全是因为刚开始看 rcu 时搜索到的网文引用的代码是这个版本的, 而且也算是早期的实现, 代码比较少, 容易看清脉络。 rcu 的原理大概就相当于一个读写锁, 不同的是实现方式: rcu 要求被读的数据被一个指针指向, 读者先读这个指针, 而后读指针指向的数据; 写者也先读这个指针及其数据, 不同的是它而后分配出一块新内存, 做一次拷贝, 而后修改在这个拷贝上进行, 等修改完毕, 将指针指向这块新内存;而后将旧内存释放掉。.. 阅读全文
posted @ 2013-02-05 17:27 zylthinking 阅读(1006) 评论(0) 推荐(0)