关于C中的功能

时间:2016-06-27 04:42:25

标签: c function

我是c编程的初学者。我正在研究一些开源代码并看到了这个:

void ofproto_rule_delete(struct ofproto *ofproto, struct rule *rule)
    OVS_EXCLUDED(ofproto_mutex)
{
    //some more code
}

我不知道这是什么,因为我缺乏知识,所以不能以更好的方式提出问题。抱歉。有谁能告诉我这是什么? (即使你看到类似的东西,你也可以提一下。)

谢谢。

确切的功能是:

<select id="year" name="year" class="form-control">
    {{-- */$last= date('Y')-120;/* --}}
    {{-- */$now = date('Y');/* --}}
    @for ($i = $now; $i <= $last; $i--)
    <option value="{{ $i }}">{{ $i }}</option>
    @endfor               
</select>

2 个答案:

答案 0 :(得分:4)

这是一个在编译代码之前由编译器扩展的宏。在这种情况下,宏can be found here(至少对于Clang):

#define OVS_EXCLUDED(...) __attribute__((locks_excluded(__VA_ARGS__)))

这告诉编译器在编译代码之前用OVS_EXCLUDED(ofproto_mutex)替换代码中的__attribute__((locks_excluded(__VA_ARGS__)))__VA_ARGS__告诉编译器粘贴传递给宏的任何内容(...,在这种情况下为ofproto_mutex)。因此,最终结果将如下所示:

void ofproto_rule_delete(struct ofproto *ofproto, struct rule *rule)
    __attribute__((locks_excluded(ofproto_mutex)))
{
    //some more code
}

请注意,由于该文件中的#ifdef规则,对于非Clang编译器,宏将定义为:

#define OVS_EXCLUDED(...)

这将只会扩展为空,只留下您期望的功能:

void ofproto_rule_delete(struct ofproto *ofproto, struct rule *rule)
{
    //some more code
}

答案 1 :(得分:3)

它是作为函数属性提供的线程安全注释,它声明调用者不能持有给定的锁。此注释用于防止死锁。许多互斥实现都不是可重入的,因此如果函数第二次获取互斥锁,就会发生死锁。

参考:

Declaring Attributes of Functions

Clang Thread Safety Analysis