小编Jum*_*ays的帖子

C&低级信号量实现

我正在考虑如何使用尽可能少的asm代码实现信号量(不是二进制).
我没有成功地在没有使用互斥锁的情况下思考和编写它,所以这是迄今为止我能做的最好的事情:

全球:

#include <stdlib.h>
#include <pthread.h>
#include <stdatomic.h>
#include <stdbool.h>

typedef struct
{
    atomic_ullong    value;
    pthread_mutex_t *lock_op;
    bool             ready;
} semaphore_t;

typedef struct
{
    atomic_ullong   value;
    pthread_mutex_t lock_op;
    bool            ready;
} static_semaphore_t;

 /* use with static_semaphore_t */
#define SEMAPHORE_INITIALIZER(value) = {value, PTHREAD_MUTEX_INITIALIZER, true}
Run Code Online (Sandbox Code Playgroud)


功能:

bool semaphore_init(semaphore_t *semaphore, unsigned long long init_value)
{   
    if(semaphore->ready) if(!(semaphore->lock_op = \
                             calloc(1, sizeof(pthread_mutex_t)))) return false;
    else                 pthread_mutex_destroy(semaphore->lock_op);   

    if(pthread_mutex_init(semaphore->lock_op, NULL))
            return false;

    semaphore->value = init_value;
    semaphore->ready = true;
    return true;
}

bool semaphore_wait(semaphore_t *semaphore)
{ …
Run Code Online (Sandbox Code Playgroud)

c assembly multithreading mutex semaphore

6
推荐指数
1
解决办法
2159
查看次数

Python:关于Python函数实现的信息

我发现了CPython实现,Python对象的结构和Python字节码.

玩函数,我发现空函数的堆栈大小为1.
为什么?声明什么var占用堆栈空间?


空功能:

def empty():
    pass
Run Code Online (Sandbox Code Playgroud)

功能信息:

>>> dis.show_code(empty)

Name:                empty
Filename:            <pyshell#27>
Argument count:      0
Kw-only arguments:   0
Stack size:          1
Number of locals:    0
Variable names:
Constants:
    0: None

Names:
Flags:               OPTIMIZED, NEWLOCALS, NOFREE
First line number:   1
Free variables:
Cell variables:
Run Code Online (Sandbox Code Playgroud)



与当地人的作用:

def withlocals():
    first = 0
    second = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

功能信息:

>>> dis.show_code(withlocals)

Name:                withlocals
Filename:            <pyshell#27>
Argument count:      0
Kw-only arguments:   0
Stack size:          3
Number of locals:    2
Variable names:
    0: …
Run Code Online (Sandbox Code Playgroud)

python cpython object python-3.x python-internals

4
推荐指数
1
解决办法
89
查看次数